파이썬에서 합계를 구하는데 오류가 나요. 이것저것 다 해봤는데 안 됩니다.
이 글에서 고쳐볼 가상 질문입니다. 코딩을 배우는 사람이 쓸 법한 문장을 직접 만들었어요. 지금 문장으로는 어떤 값을 더했는지, 무엇이 나와야 하는지 알 수 없습니다. 답변자는 코드를 고치기 전에 그 부분부터 물어야 합니다.
여기에 실행할 코드를 붙여봅니다. 아래 예제와 오류는 Python 3.12.7에서 직접 실행해 확인했어요.
values = ["10", "20"]
print(sum(values))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
이제 답변자는 같은 입력으로 코드를 실행하고, 같은 오류가 나는지 확인할 수 있습니다. 하지만 코드를 올렸다고 끝난 건 아니에요. 원하는 것이 숫자 합계 30인지, 문자열을 이은 "1020"인지도 적어야 합니다. 어느 결과를 원하는지에 따라 답변이 달라지기 때문이에요. 이 가상 질문에서는 숫자 합계 30을 원한다고 정하겠습니다.
예제에서 남긴 핵심은 문자열이 든 리스트와 그 리스트를 더하는 줄입니다. 길이를 줄이더라도 오류가 생기는 조건은 남아 있어야 해요. 실제 프로그램에서 값을 읽어오는 과정이 있더라도, 이 문제를 보여줄 입력이 values에 들어 있으면 다른 사람이 같은 상태로 출발할 수 있어요. 반대로 파일을 읽는 과정에서만 생기는 오류라면 그 파일의 재현용 데이터와 읽는 부분도 남겨야 합니다. Stack Overflow 도움말이 말하는 최소 재현 예제도 같은 문제가 생기는 작은 코드, 필요한 구성의 포함, 실제 재실행을 함께 요구합니다.1
‘해봤다’에 무엇을 했는지 더합니다
“인터넷에서 찾아보고 다 해봤어요”에는 실패한 시도의 내용이 빠져 있습니다. 다음처럼 코드를 남기면 어떤 생각으로 고치려 했는지 드러나요.
print(int(["10", "20"]))
이 시도도 직접 실행했습니다. 결과는 아래와 같았어요.
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
오류가 하나 더 생겼으니 적을 가치가 없다고 느낄 수 있어요. 하지만 이 경우에는 리스트 전체를 한 번에 숫자로 바꾸려 했다는 정보가 생겼습니다. sum()은 기본 시작값 0에 원소를 차례로 더하고, int()는 숫자나 정수로 해석할 수 있는 문자열 등을 정수로 만듭니다.2 이 입력에서 바꿔야 할 대상이 리스트인지 각 문자열인지 물을 수 있게 됐어요.
실제로 sum(int(x) for x in values)를 실행하면 이 예제에서는 30이 나옵니다. 그렇다고 질문글을 무조건 정답 코드로 바꿀 필요는 없습니다. 원소별 변환이라는 답을 아직 모르는 단계라면, 실패한 코드와 이해하고 싶은 지점을 적으면 돼요. 이미 고쳤다면 “해결했습니다” 뒤에 원인과 고친 부분을 덧붙일 수 있고요.
고친 질문글에 있는 코드만 새 파일에 복사해 실행해보세요. 이 예제는 위 두 줄만으로 같은 오류가 납니다. 원래 파일에는 있었지만 질문에서 빠뜨린 변수나 외부 파일이 없는지 보기 위해서예요. 편집하다 오류가 사라졌다면 지금 질문에 붙인 코드는 더 이상 원래 문제를 보여주지 않습니다.1
제목은 ‘질문 있어요’보다 구체적으로 적습니다. 여기서는 언어, 입력의 종류, 오류가 나는 함수를 제목에 넣었습니다. 코드는 복사해 실행할 수 있는 텍스트로 두고, 오류도 정확한 문구로 남깁니다. 이런 작성 기준은 Stack Overflow의 질문 도움말에서도 안내합니다.3 아래는 이를 참고해 만든 한국어 학습 커뮤니티용 가상 질문글입니다. 게시할 곳에 별도 질문 양식이 있다면 그 양식에 맞춰 옮기세요.
고친 질문글
제목: 파이썬에서 숫자 문자열 리스트를 sum()에 넣으면 TypeError가 납니다
Python 3.12.7을 사용하고 있습니다. 숫자로 된 문자열 두 개가 들어 있는 리스트의 합계를 구하려고 합니다. 문자열 "1020"이 아니라 숫자 30을 출력하고 싶습니다.
오류가 나는 코드는 다음과 같습니다. 외부 파일이나 추가 라이브러리는 사용하지 않습니다.
values = ["10", "20"]
print(sum(values))
print(sum(values))를 실행하면 아래 오류가 납니다.
TypeError: unsupported operand type(s) for +: 'int' and 'str'
리스트를 숫자로 바꾸면 될 것 같아서 print(int(values))도 시도했습니다. 이때는 다음 오류가 났습니다.
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
리스트 전체에 int()를 적용하는 것과 안에 든 문자열 각각에 적용하는 것은 어떻게 다른가요? 이 입력을 숫자로 더하려면 어느 부분을 변환해야 하는지 알고 싶습니다.
Footnotes
-
Stack Overflow, How to create a Minimal, Reproducible Example. Minimal·Complete·Reproducible 항목에서 같은 문제를 보이는 작은 코드, 재현에 필요한 모든 부분, 올릴 코드의 실제 테스트를 설명합니다. Reproducible 절은 기대 동작과 정확한 오류 문구·발생 위치도 포함하도록 안내합니다. ↩ ↩2
-
Python 3.12 내장 함수 문서.
sum(iterable, start=0)절의 기본 시작값과 순차 합산 설명, 같은 페이지int()절의 정수 생성 대상과 예를 확인했습니다. 본문의 두 오류 문구와 결과 30은 문서 인용이 아니라 이 글의 자체 코드 실행 결과입니다. ↩ -
Stack Overflow, How do I ask a good question?. 구체적 문제를 요약하는 제목, 의도 설명, 재현 가능한 코드·데이터·오류의 텍스트 제공과 게시 전 재검토 부분을 참고했습니다. 본문은 한국어 연습용 문서이며 이 사이트의 게시 예문을 옮긴 것이 아닙니다. ↩