[PYTHON] TypeError : 예외는 구식 클래스이거나 str이 아닌 BaseException에서 파생 된 것이어야합니다.
PYTHONTypeError : 예외는 구식 클래스이거나 str이 아닌 BaseException에서 파생 된 것이어야합니다.
다음은 내 코드입니다.
test = 'abc'
if True:
raise test + 'def'
그리고 이것을 실행하면 TypeError를 얻을 수 있습니다.
TypeError: exceptions must be old-style classes or derived from BaseException, not str
그렇다면 시험은 어떤 종류의 시험입니까?
해결법
-
==============================
1.raise의 유일한 인수는 예외가 발생했음을 나타냅니다. 예외 인스턴스 또는 예외 클래스 (Exception에서 파생 된 클래스) 여야합니다.
raise의 유일한 인수는 예외가 발생했음을 나타냅니다. 예외 인스턴스 또는 예외 클래스 (Exception에서 파생 된 클래스) 여야합니다.
이 시도:
test = 'abc' if True: raise Exception(test + 'def')
-
==============================
2.str을 올릴 수 없습니다. 예외 만 제기 할 수 있습니다.
str을 올릴 수 없습니다. 예외 만 제기 할 수 있습니다.
그래서, 당신은 그 문자열로 예외를 만들고 그것을 높이는 것이 낫습니다. 예를 들어 다음과 같이 할 수 있습니다.
test = 'abc' if True: raise Exception(test + 'def')
또는
test = 'abc' if True: raise ValueError(test + 'def')
희망은 도움이됩니다.
-
==============================
3.그것은 예외가되어야합니다.
그것은 예외가되어야합니다.
당신은 다음과 같이하고 싶다.
raise RuntimeError(test + 'def')
파이썬 2.5와 그 이하 버전에서 코드는 작동 할 것이고, 그때 문자열을 예외로 올릴 수 있습니다. 이는 매우 나쁜 결정이었고 2.6에서 제거되었습니다.
from https://stackoverflow.com/questions/11497234/typeerrorexceptions-must-be-old-style-classes-or-derived-from-baseexception-no by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] "socket.error : [Errno 111] Connection refused"예외를 잡아라. (0) | 2018.10.22 |
---|---|
[PYTHON] pip가 프록시 서버 뒤에서 작동하도록하는 방법 [duplicate] (0) | 2018.10.22 |
[PYTHON] sys.exit (0)과 os._exit (0)의 차이점은 무엇입니까? (0) | 2018.10.22 |
[PYTHON] 파이썬 : 초를 hh로 변환 : mm : ss [duplicate] (0) | 2018.10.22 |
[PYTHON] 예외를 발생시키지 않고 python 스택 추적을 인쇄하십시오. (0) | 2018.10.21 |