Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 문자열 포매팅으로 튜플 전체를 출력하는 방법

파이썬 구식 문자열 포매팅에서 튜플이 깨지는 이유

파이썬의 구식 문자열 포매팅 방식, 즉 "" % () 형태를 사용할 때 주의해야 할 점이 있습니다. % 기호 뒤에 오는 값이 튜플이라면, 파이썬은 이를 하나의 객체로 취급하지 않고 자동으로 분해하여 각 요소를 개별 인자로 문자열에 전달하려고 시도합니다.

예를 들어 다음 코드를 살펴보겠습니다.

tup = (1,2,3)
print("this is a tuple %s" % (tup))

이 코드는 아래와 같은 오류를 발생시킵니다.

TypeError: not all arguments converted during string formatting

오류가 발생하는 원인은 앞서 설명한 것과 같습니다. 파이썬이 튜플 (1, 2, 3)을 세 개의 개별 값으로 분해했기 때문에, 포맷 문자열에는 자리표시자가 하나뿐인데 인자가 세 개가 되어 버린 것입니다. 이로 인해 "모든 인자가 변환되지 않았다"는 TypeError가 발생하게 됩니다.

튜플 전체를 출력하는 해결 방법

튜플을 통째로 하나의 값으로 전달하려면, 튜플을 감싸는 래퍼(wrapper) 튜플을 만들어야 합니다. 이때 사용하는 것이 바로 (tup, ) 문법입니다.

tup = (1,2,3)
print("this is a tuple %s" % (tup, ))

이제 실행하면 의도한 대로 결과가 출력됩니다.

this is a tuple (1, 2, 3)

(tup, ) 문법의 의미

(tup,) 표기법은 단일 값을 가진 튜플을 일반적인 괄호로 묶인 표현식(expression)과 구분하기 위한 파이썬의 문법입니다. 쉼표가 있으면 파이썬은 이것을 "요소가 하나인 튜플"로 인식하고, % 연산자도 내부의 튜플을 분해하지 않고 그대로 하나의 값으로 전달하게 됩니다.

참고로 최신 파이썬에서는 f-string(f"{tup}")이나 .format() 메서드를 사용하면 이런 문제 없이 튜플을 더 직관적으로 출력할 수 있으니, 새 프로젝트에서는 이 방식들을 활용하는 것도 좋은 선택입니다.