더북(TheBook)

마찬가지로 오른쪽에 있는 파라미터의 순서를 그대로 유지하고 형식 문자열의 순서를 바꿔도 같은 오류가 발생한다.

reordered_string = '%.2f = %-10s' % (key, value)

>>>
Traceback ...
TypeError: must be real number, not str

이런 오류를 피하려면 % 연산자의 좌우가 서로 잘 맞는지 계속 검사해야 한다. 코드를 변경할 때마다 사람이 직접 검사해야 하므로 검사 과정에서 실수하기 쉽다.

C 스타일 형식화 식의 두 번째 문제점은 형식화를 하기 전에 값을 살짝 변경해야 한다면(이런 경우가 꽤 많이 있다) 식을 읽기가 매우 어려워진다는 점이다. 다음 예제를 보면 부엌 찬장의 내용물을 변경하지 않고 열거했다.6

pantry = [
    ('아보카도', 1.25),
    ('바나나', 2.5),
    ('체리', 15),
]

for i, (item, count) in enumerate(pantry):
    print('#%d: %-10s = %.2f' % (i, item, count))

>>>
#0: 아보카도     = 1.25
#1: 바나나     = 2.50
#2: 체리     = 15.00

 

 


6 역주 결과로부터 형식화 문자열에서 한글(실제로는 유니코드 한중일 문자 모두) 문자열의 너비를 지정하는 경우 (겉으로 보기에) 제대로 작동하지 않을 수도 있음을 알 수 있다. https://stackoverflow.com/questions/4622357/how-to-control-padding-of-unicode-string-containing-east-asia-characters(단축 URL: https://bit.ly/30SiKbn)를 보라.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.