본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

[ Python ] TypeError: unsupported operand type(s) for +: 'int' and 'str' ...




Python error

TypeError: unsupported operand type(s) for +: 'int' and 'str' ...








 시작 전 테스트환경 살피기

   Time

    2017년 08월 18일

   OS

    Linux(Ubuntu 16.04 LTS)

   Language

    Python 2.7




일단 문제의 원인은 보통 문장을 연결해 줄 때 발생한다.

문자열 + 정수형 문자를 연산하면 문자열로 만들어 줬던 다른 언어체계와 헷갈리기 시작하는게 주 원인같다.


예를 들어 아래와 같은 문장 사용시에 Python은 error를 뱉는다.



>>> print "hi" + 2017 + "nice to meet you" + 1004

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

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



Python은 문자열과 정수형의 + 연산을 허용하지 않는다. 따라서 이를 해결하기 위한 방법은 총 4가지로 나뉘게 된다.



1. int형을 문자열형태로 감사준다.



우리는 str ( ) 내장함수를 이용하여 숫자형태의 data를 문자열로 만들수 있다. 이를 적용해보자.



>>> print "hi" + str(2017) + "nice to meet you" + str(1004)

hi2017nice to meet you1004




2. +로 묶지 말고 ,를 이용한다.



+연산자가 아닌 콤마( , )를 이용하면 int형과 str형을 묶을 수 있다.

왜인지는.. 아직 미궁이다.. 추측하건데 print에 ,를 기준으로 인수로 끊어져 들어가면서 자동으로 문자형태로 바뀌는것이 아닐까 한다..

알면 가르쳐주길..


str( )을 사용했을 때와 다르게 콤마를 이용하면 각 인수들 사이가 띄워서 저장된다.

인수사이의 간격을 띄우고 콤마를 찍을 때와 (인수1, 인수2) 콤마만 찍을 때 (인수1,인수2) 모두 사이간격이 띄워져서 나온다.



>>> print "hi", 2017, "nice to meet you", 1004

hi 2017 nice to meet you 1004


>>> print "hi",2017,"nice to meet you",1004

hi 2017 nice to meet you 1004




3. 포맷코드를 이용한 포매팅



포맷코드( 잘 모르겠으면 문자열 포맷팅 부분을 보자, 굵은글씨 click후 page 중간 쯤에 있다! )를 이용하여 위치를 지정해준다.



>>> print "%s %d %s %d" %("hi", 2017, "nice to meet you", 1004)

hi 2017 nice to meet you 1004


>>> print "hi" "%d" "nice to meet you" "%d" %(2017, 1004)

hi2017nice to meet you1004




4. 고급포맷을 이용한 포매팅



고급포맷을 모르겠다면 위의 문자열 포매팅( 굵은 글씨 ) 에 걸려있는 링크를 따라가서 문자열 포매팅 밑에 있는 Plus 고급 문자열 포매팅을 클릭하여 내용을 참조하자!



>>> print "{0} {1} {2} {3}".format("hi", 2017, "nice to meet you", 1004)

hi 2017 nice to meet you 1004