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

파이썬 TypeError 해결법: 'str'과 'int' 객체를 연결할 수 없는 이유와 % 포맷팅 사용법

문제 상황

파이썬에서 반복문으로 숫자를 출력하다 보면 다음과 같은 오류 메시지를 마주할 수 있습니다.

TypeError: cannot concatenate 'str' and 'int' objects

이는 문자열(str) 객체와 정수(int) 객체를 서로 연결하려고 할 때 발생하는 대표적인 타입 오류입니다. 예를 들어 아래처럼 코드를 작성하면 오류가 발생합니다.

for num in range(5):
    print("%d" % num + 1)

해결 방법: 괄호로 묶기

가장 간단한 해결책은 n+1을 괄호로 묶어 하나의 표현식으로 만드는 것입니다.

for num in range(5):
    print("%d" % (num+1))

괄호를 사용하면 num+1이 먼저 계산된 뒤 그 결과값이 %d에 전달되므로, 오류 없이 1부터 5까지 정상적으로 출력됩니다.

오류가 발생한 원인

%d는 뒤에 오는 값을 정수 형식으로 치환하는 포맷 지정자입니다. 문제는 연산자 우선순위 때문에 "%d" % num이 먼저 처리되어 문자열이 되고, 그 결과에 정수 1을 더하려 한다는 점입니다.

파이썬에서 문자열 객체는 숫자와 직접 연결(concatenate)될 수 없습니다. 따라서 인터프리터는 "'str'과 'int' 객체를 연결할 수 없다"는 TypeError를 표시하는 것입니다.

더 나은 대안들

최신 파이썬에서는 가독성이 더 좋고 실수를 줄일 수 있는 문자열 포매팅 방법들을 사용할 수 있습니다.

1. f-string (파이썬 3.6 이상)

for num in range(5):
    print(f"{num + 1}")

2. str() 함수로 형 변환

for num in range(5):
    print(str(num + 1))

3. format() 메서드

for num in range(5):
    print("{}".format(num + 1))

이 방법들은 연산자 우선순위로 인한 혼동을 피할 수 있어 코드의 의도가 훨씬 명확하게 드러납니다.

정리

'str'과 'int'를 연결할 수 없다는 오류는 문자열과 숫자를 직접 더하려 할 때 발생합니다. % 포매팅을 사용할 때는 수식을 괄호로 묶어주면 되고, 가능하다면 f-string 같은 최신 문법을 활용하는 것이 더 안전하고 읽기 쉬운 코드를 작성하는 방법입니다.