형식 문자열은 연산자 왼쪽에 있는 값을 끼워 넣을 자리를 표현하기 위해 %d 같은 형식 지정자(format specifier)를 사용한다. 형식 지정자의 문법은 C의 printf 함수에서 비롯됐으며, 파이썬에 이식됐다(다른 프로그래밍 언어도 비슷하다). 파이썬은 %s, %x, %f 등 C 언어의 printf에 사용할 수 있는 대부분의 형식 지정자를 지원하고, 소수점 위치나 패딩, 채워 넣기, 좌우 정렬 등도 제공한다. 파이썬을 처음 접하는 프로그래머 중 상당수는 (다른 언어에서 써봤기 때문에) 익숙하고 사용하기 간편하다는 이유로 C 스타일 형식 문자열을 사용한다.
하지만 파이썬에서 C 스타일 형식 문자열을 사용하는 데는 네 가지 문제점이 있다.
첫 번째 문제점은 형식화 식에서 오른쪽에 있는 tuple 내 데이터 값의 순서를 바꾸거나 값의 타입을 바꾸면 타입 변환이 불가능하므로 오류가 발생할 수 있다는 것이다. 예를 들어 다음 예제에 있는 간단한 형식 문자열은 잘 작동한다.
key = 'my_var' value = 1.234 formatted = '%-10s = %.2f' % (key, value) print(formatted) >>> my_var = 1.23
하지만 key와 value의 위치를 바꾸면 실행 시점에 예외가 발생한다.
reordered_tuple = '%-10s = %.2f' % (value, key) >>> Traceback ... TypeError: must be real number, not str