그 코드가 있다면 :
try:
some_method()
except Exception, e:
이 예외 값 (문자열 표현)을 어떻게 얻을 수 있습니까?
답변
사용하다 str
try:
some_method()
except Exception as e:
s = str(e)
또한 대부분의 예외 클래스에는 args
속성이 있습니다. 종종 args[0]
오류 메시지가 나타납니다.
str
오류 메시지가 없으면을 사용 하면 빈 문자열이 반환되지만 repr
pyfunc 권장 사항을 사용하면 최소한 예외 클래스가 표시됩니다. 필자는 인쇄하는 경우 클래스가 무엇인지 신경 쓰지 않고 오류 메시지 만 원하는 최종 사용자를위한 것입니다.
실제로 처리하는 예외 클래스와 인스턴스화 방법에 따라 다릅니다. 특별히 염두에 두었습니까?
답변
repr () 사용과 repr과 str 사용의 차이점
사용 repr
:
>>> try:
... print(x)
... except Exception as e:
... print(repr(e))
...
NameError("name 'x' is not defined")
사용 str
:
>>> try:
... print(x)
... except Exception as e:
... print(str(e))
...
name 'x' is not defined
답변
이것이 오래된 질문이라는 것을 알고 있지만 예외 출력을 처리하기 위해 traceback
모듈 을 사용하는 것이 좋습니다 .
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
.
'integer division or modulo by zero'
repr(e)
아마도 당신이 원하지 않는 완전한 예외 표현을 제공합니다 :
"ZeroDivisionError('integer division or modulo by zero',)"
편집하다
내 잘못이야 !!! BaseException.message
에서 더 이상 사용되지 않는2.6
것 같습니다 . 마지막으로 예외 메시지를 표시하는 표준화 된 방법이 아직없는 것 같습니다. 내가 추측 있도록 최선와 거래를하는 것입니다 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")'
답변
python2의 e.message
경우 예외 메시지를 얻는 데 사용 하는 것이 UnicodeDecodeError
좋습니다. 그러나 예 e.message
와 같은 예외는 비어있을 것 OSError
입니다.이 경우 exc_info=True
오류를 놓치지 않기 위해 로깅 함수에 a 를 추가 할 수 있습니다 .
python3의 경우을 사용하는 것이 안전하다고 생각합니다 str(e)
.
답변
오류 유형 / 원본을 모르는 경우 다음을 시도해보십시오.
import sys
try:
doSomethingWrongHere()
except:
print('Error: {}'.format(sys.exc_info()[0]))
그러나 pep8 경고가 나타납니다.
[W] PEP 8 (E722): do not use bare except
답변
오류 메시지를 검사하고 무언가를 수행하려면 (Python 3 사용) …
try:
some_method()
except Exception as e:
if {value} in e.args:
{do something}