반응형
Notice
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 파이썬
- springboot
- 데이터분석
- 딥러닝
- 자바스크립트
- 데이터과학
- 데이터베이스
- 데이터구조
- 컴퓨터비전
- 프로그래밍언어
- 소프트웨어공학
- 빅데이터
- 보안
- 프로그래밍
- 컴퓨터과학
- 클라우드컴퓨팅
- 알고리즘
- 웹개발
- 인공지능
- 디자인패턴
- Yes
- 소프트웨어
- 사이버보안
- 네트워크보안
- 자료구조
- 컴퓨터공학
- 버전관리
- 네트워크
- I'm Sorry
- 머신러닝
Archives
- Today
- Total
스택큐힙리스트
파이썬: "TypeError: __str__은 문자열이 아닌 값을 반환했습니다." 하지만 여전히 출력됩니까? 본문
반응형
나는 새로운 노트를 만드는 이 코드 조각을 가지고 있습니다. 출력되지만 다음과 같은 오류가 발생합니다:
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