스택큐힙리스트

파이썬: "TypeError: __str__은 문자열이 아닌 값을 반환했습니다." 하지만 여전히 출력됩니까? 본문

카테고리 없음

파이썬: "TypeError: __str__은 문자열이 아닌 값을 반환했습니다." 하지만 여전히 출력됩니까?

스택큐힙리스트 2023. 11. 25. 11:25
반응형

나는 새로운 노트를 만드는 이 코드 조각을 가지고 있습니다. 출력되지만 다음과 같은 오류가 발생합니다:


Error:
C:\Python27\Basics\OOP\formytesting>python notebook.py
Memo=This is my first memo, Tag=example
Traceback (most recent call last):
File notebook.py, line 14, in <module>
print(firstnote)
TypeError: __str__ returned non-string (type NoneType)

note.py:


import datetime
class Note:
def __init__(self, memo, tags):
self.memo = memo
self.tags = tags
self.creation_date = datetime.date.today()

def __str__(self):
print('Memo={0}, Tag={1}').format(self.memo, self.tags)

if __name__ == __main__:
firstnote = Note('This is my first memo','example')
print(firstnote)


답변 1

메소드 __str__은(는) 출력하는 것이 아니라 문자열을 반환해야 합니다.


def __str__(self):
return 'Memo={0}, Tag={1}'.format(self.memo, self.tags)

답변 2

제목: 파이썬: TypeError: __str__에서 문자열이 아닌 것을 반환하지만 출력은 되는 이유
서론:
파이썬은 매우 인기있는 프로그래밍 언어로, 간결하고 읽기 쉬운 코드를 작성할 수 있는 장점이 있습니다. 그러나 때로는 우리가 예상치 못한 오류 메시지를 만나게 됩니다. 이 중 하나인 TypeError: __str__에서 문자열이 아닌 것을 반환하지만 출력은 되는 이유에 대해 알아보고 해결책을 찾아보겠습니다.
본론:
이 오류 메시지는 주로 파이썬 클래스에서 __str__ 메서드를 잘못 구현했을 때 발생합니다. __str__ 메서드는 해당 클래스의 객체를 문자열로 표현하기 위해 사용됩니다. 일반적으로 이 메서드는 문자열을 반환해야 합니다. 하지만 경우에 따라 문자열이 아닌 다른 유형의 값을 반환하는 경우, 이 오류 메시지가 표시됩니다.
그러나 이상한 점은 오류 메시지가 표시되는 동시에 해당 클래스의 객체가 여전히 출력된다는 것입니다. 그 이유는 파이썬이 __str__ 메서드가 아닌 다른 메서드인 __repr__ 메서드를 호출하기 때문입니다. __repr__ 메서드는 해당 객체를 다시 생성하는 데 사용되며, 일반적으로 개발자들이 디버깅을 위해 사용합니다. 따라서 __str__ 메서드에서의 오류는 객체를 직접 출력할 때와는 다르게 동작할 수 있는 것입니다.
이런 상황에서 우리에게 중요한 질문은, 왜 __repr__ 메서드가 __str__을 대신 호출하는 것일까요? 파이썬은 항상 객체를 출력해야 할 때 __str__ 메서드 대신 __repr__ 메서드를 호출합니다. 다시 말해, __str__ 메서드가 제대로 구현되지 않았지만 객체를 출력할 수 있는 경우, 파이썬은 객체를 표현하기 위해 __repr__ 메서드를 호출합니다.
해결책으로는 다음과 같이 __str__ 메서드를 수정할 수 있습니다. __str__ 메서드는 항상 문자열 값을 반환하도록 구현해야 합니다. 그러지 않으면 위의 오류 메시지가 표시됩니다. 또는 작업에 따라 __repr__ 메서드를 재정의하여 두 메서드 모두 정상적으로 반환되도록 할 수도 있습니다.
결론:
파이썬에서 TypeError: __str__에서 문자열이 아닌 것을 반환하지만 출력은 되는 이유 에러 메시지가 발생하는 경우, 클래스의 __str__ 메서드를 확인하고 문자열을 반환하도록 수정해야 합니다. 파이썬은 __repr__ 메서드를 호출하여 객체를 출력할 수 있지만, 일반적으로 __str__ 메서드가 우선적으로 사용되므로 항상 문자열 값을 반환하는 것이 중요합니다. 이렇게 함으로써 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

반응형
Comments