Python에서 예외 값을 가져오는 중
이 코드가 있는 경우:
try:
some_method()
except Exception, e:
이 예외값(문자열 표현)을 얻으려면 어떻게 해야 합니까?
사용하다str
try:
some_method()
except Exception as e:
s = str(e)
또한, 대부분의 예외 클래스에는args
기여하다.자주,args[0]
에러 메세지가 됩니다.
주의하셔야 할 점은str
에러 메세지가 표시되지 않는 경우는, 빈 문자열을 반환합니다.repr
pyfunc가 권장하는 대로 예외 클래스는 최소한 표시됩니다.인쇄를 하고 있는 경우는, 클래스의 종류에 관계없이, 에러 메세지만을 요구하는 최종 유저를 위한 것이라고 생각합니다.
실제로 다루는 예외의 클래스와 인스턴스화 방법에 따라 달라집니다.특별히 생각하고 있는 것이 있습니까?
Use repr() 및 repr과 str의 차이점
사용방법:
>>> try:
... print(x)
... except Exception as e:
... print(repr(e))
...
NameError("name 'x' is not defined")
사용방법:
>>> try:
... print(x)
... except Exception as e:
... print(str(e))
...
name 'x' is not defined
오래된 질문이라는 것을 알고 있습니다만, 예외의 출력을 처리하기 위해 모듈을 사용할 것을 제안합니다.
사용하다traceback.print_exc()
현재 예외를 표준 오류에 대해 인쇄합니다(파악되지 않은 상태로 유지되는 경우 인쇄되는 것과 같거나,traceback.format_exc()
문자열과 같은 출력을 얻을 수 있습니다.출력을 제한하거나 파일 같은 개체로 인쇄를 리디렉션하려면 이러한 함수 중 하나에 다양한 인수를 전달할 수 있습니다.
또 다른 방법은 아직 제시되지 않았습니다.
try:
1/0
except Exception, e:
print e.message
출력:
integer division or modulo by zero
args[0]
메시지가 아닐 수도 있어요
str(e)
따옴표로 둘러싸인 문자열과 선두가 반환될 수 있습니다.u
unicode의 경우:
'integer division or modulo by zero'
repr(e)
는 다음과 같은 모든 예외 표현을 제공하지만, 이는 사용자가 원하는 것이 아닐 수 있습니다.
"ZeroDivisionError('integer division or modulo by zero',)"
편집하다
내 잘못이야!!!인 것 같다BaseException.message
는 에서 폐지되었습니다.마지막으로 예외 메시지를 표시하는 표준화된 방법은 아직 없는 것 같습니다.그래서 가장 좋은 것은 이 문제를 해결하는 것이라고 생각합니다.e.args
그리고.str(e)
니즈에 따라(그리고 경우에 따라서는)e.message
사용하고 있는 lib가 그 메커니즘에 의존하고 있는 경우).
예를 들어,pygraphviz
,e.message
예외를 올바르게 표시하는 유일한 방법입니다.str(e)
메시지를 에워싸다u''
.
단,MySQLdb
메시지를 가져오는 적절한 방법은 다음과 같습니다.e.args[1]
:e.message
비어 있습니다.str(e)
표시되다'(ERR_CODE, "ERR_MSG")'
오류 메시지를 검사하고 Python 3을 사용하여 작업을 수행하려면...
try:
some_method()
except Exception as e:
if {value} in e.args:
{do something}
python2의 경우 사용하는 것이 좋습니다.e.message
, 한 "예외 메시지"를 합니다.UnicodeDecodeError
네, 그렇습니다.e.message
다음과 같은 예외로 인해 비어 있을 것이다.OSError
a를 수 exc_info=True
오류를 놓치지 않도록 로그 기능을 설정합니다.
python3를 사용하는 합니다.str(e)
.
다음과 같은 것이 도움이 되었습니다.
import traceback
try:
some_method()
except Exception as e:
# Python 3.9 or older
print("".join(traceback.format_exception_only(type(e), e)).strip())
# Python 3.10+
print("".join(traceback.format_exception_only(e)).strip())
ifsome_method()
를 ValueError("asdf")
은 "traceback" 입니다.트레이스 백은 다음과 같이 표시됩니다.ValueError: asdf
.
언급URL : https://stackoverflow.com/questions/4308182/getting-the-exception-value-in-python
'itsource' 카테고리의 다른 글
문자열이 지정된 문자열로 시작되는지 확인하려면 어떻게 해야 합니다. (0) | 2022.09.11 |
---|---|
vuex 작업에 dayJS를 사용할 수 있지만 Vuex 저장소의 상태를 초기화할 수 없는 이유는 무엇입니까? (0) | 2022.09.11 |
JavaScript에서 "0"은 false와 같지만, "if"에 의해 테스트되면 그 자체로 false가 아닌 이유는 무엇입니까? (0) | 2022.09.11 |
인덱스 서명 매개 변수 형식은 유니언 형식일 수 없습니다.대신 매핑된 개체 유형을 사용하는 것이 좋습니다. (0) | 2022.09.11 |
JSON 문자열을 리스트가 아닌 딕셔너리로 변환 (0) | 2022.09.11 |