파이썬에서 예외를 인쇄하는 방법? whatever error occurred.’) except:블록 에 오류 / 예외를

try:
    something here
except:
    print('the whatever error occurred.')

except:블록 에 오류 / 예외를 어떻게 인쇄 할 수 있습니까?



답변

Python 2.6 이상 및 Python 3.x의 경우 :

except Exception as e: print(e)

Python 2.5 및 이전 버전의 경우 다음을 사용하십시오.

except Exception,e: print str(e)


답변

traceback모듈은 예외 와 그 역 추적 을 형식화하고 인쇄 하는 방법을 제공합니다 . 예를 들어, 기본 핸들러처럼 예외를 인쇄합니다.

import traceback

try:
    1/0
except Exception:
    traceback.print_exc()

산출:

Traceback (most recent call last):
  File "C:\scripts\divide_by_zero.py", line 4, in <module>
    1/0
ZeroDivisionError: division by zero


답변

Python 2.6 이상 에서는 약간 더 깨끗합니다.

except Exception as e: print(e)

이전 버전에서는 여전히 읽을 수 있습니다.

except Exception, e: print e


답변

오류 문자열을 전달하려는 경우 오류 및 예외 의 예 (Python 2.6)

>>> try:
...    raise Exception('spam', 'eggs')
... except Exception as inst:
...    print type(inst)     # the exception instance
...    print inst.args      # arguments stored in .args
...    print inst           # __str__ allows args to printed directly
...    x, y = inst          # __getitem__ allows args to be unpacked directly
...    print 'x =', x
...    print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs


답변

(@jldupont의 답변에 대한 의견으로 이것을 남겨 두려고했지만 평판이 충분하지 않습니다.)

다른 곳에서도 @jldupont의 답변과 같은 답변을 보았습니다. FWIW, 나는 이것을 주목하는 것이 중요하다고 생각합니다.

except Exception as e:
    print(e)

sys.stdout기본적으로 오류 출력을 인쇄합니다 . 일반적인 오류 처리 방법은 다음과 같습니다.

except Exception as e:
    print(e, file=sys.stderr)

( import sys이 작업을 수행해야합니다.) 이렇게하면 오류 STDERR대신에 오류가 인쇄되어 STDOUT올바른 출력 구문 분석 / 리디렉션 등이 가능합니다. 나는 문제가 ‘오류 인쇄’에 관한 것이지만, 더 잘 배우지 않는 사람에게는 비표준 코드로 이어질 수있는이 세부 사항을 생략하는 것이 아니라 모범 사례를 지적하는 것이 중요하다고 생각합니다.

나는 tracebackCat Plus Plus의 답변에서와 같이 모듈을 사용하지 않았 으며 아마도 이것이 가장 좋은 방법 일지 모르지만 이것을 버릴 것이라고 생각했습니다.


답변

파이썬 3 : logging

기본 print()기능 을 사용하는 대신 보다 유연한 logging모듈을 사용하여 예외를 기록 할 수 있습니다. 이 logging모듈은 주어진 로그 파일에 메시지 기록, 타임 스탬프가 포함 된 메시지 기록 및 기록이 발생한 위치에 대한 추가 정보와 같은 많은 추가 기능을 제공합니다. (자세한 내용은 공식 문서를 확인하십시오 .)

다음과 같이 모듈 수준 함수를 사용하여 예외 로깅을 수행 할 수 있습니다 logging.exception().

import logging

try:
    1/0
except BaseException:
    logging.exception("An exception was thrown!")

산출:

ERROR:root:An exception was thrown!
Traceback (most recent call last):
  File ".../Desktop/test.py", line 4, in <module>
    1/0
ZeroDivisionError: division by zero 

노트:

  • 이 함수 logging.exception()는 예외 처리기에서만 호출해야합니다

  • logging모듈은 로깅을 방지하기 위해 처리기 내에서 사용하지 않아야 RecursionError(감사 @PrakharPandey)를


대체 로그 수준

다음 exc_info=True과 같이 keyword 인수를 사용하여 다른 로그 수준으로 예외를 기록 할 수도 있습니다 .

logging.debug("An exception was thrown!", exc_info=True)
logging.info("An exception was thrown!", exc_info=True)
logging.warning("An exception was thrown!", exc_info=True)


답변

assert 문으로 하나의 라이너 오류 발생을 수행 할 수 있습니다. 이것은 정적으로 수정 가능한 코드를 작성하고 오류를 조기에 확인하는 데 도움이됩니다.

assert type(A) is type(""), "requires a string"