예외를 검사하는 데 사용할 때 사용해야하는 특정 예가 있습니다 del
(다른 사람이있을 수도 있지만이 정보를 알고 sys.exc_info()
있음). 이 함수는 튜플, 발생한 예외 유형, 메시지 및 역 추적을 리턴합니다.
처음 두 값은 일반적으로 오류를 진단하고 조치를 취하기에 충분하지만 세 번째 값은 예외가 발생한 위치와 예외가 발생한 위치 사이의 전체 호출 스택을 포함합니다. 특히, 당신이 같은 것을하면
try:
do_evil()
except:
exc_type, exc_value, tb = sys.exc_info()
if something(exc_value):
raise
역 추적 tb
은 호출 스택의 로컬에서 끝나며 가비지 수집 할 수없는 순환 참조를 만듭니다. 따라서 다음을 수행하는 것이 중요합니다.
try:
do_evil()
except:
exc_type, exc_value, tb = sys.exc_info()
del tb
if something(exc_value):
raise
순환 참조를 끊습니다. sys.exc_info()
메타 클래스 매직과 같이을 호출하려는 많은 경우에 역 추적 (traceback) 이 유용하므로 예외 핸들러를 떠나기 전에이를 정리해야합니다. 역 추적이 필요하지 않은 경우 역 추적을 즉시 삭제하거나 다음을 수행해야합니다.
exc_type, exc_value = sys.exc_info()[:2]
모두 함께 피하십시오.
del
.