처리되지 않은 예외가 발생할 때 sys.exitfunc를 건너뛰는 방법
문제
보시다시피, 프로그램이 죽은 후에도 무덤에서 말을 하고 있습니다.예외 발생 시 종료 기능을 "등록 취소"하는 방법이 있습니까?
import atexit
def helloworld():
print("Hello World!")
atexit.register(helloworld)
raise Exception("Good bye cruel world!")
출력
Traceback (most recent call last):
File "test.py", line 8, in <module>
raise Exception("Good bye cruel world!")
Exception: Good bye cruel world!
Hello World!
해결책
왜 그렇게 하려는지는 모르겠지만, 포착되지 않은 예외가 발생할 때마다 Python이 호출하는 예외 후크를 설치할 수 있습니다. atexit
기준 치수.
그런 것 :
import sys
import atexit
def clear_atexit_excepthook(exctype, value, traceback):
atexit._exithandlers[:] = []
sys.__excepthook__(exctype, value, traceback)
def helloworld():
print "Hello world!"
sys.excepthook = clear_atexit_excepthook
atexit.register(helloworld)
raise Exception("Good bye cruel world!")
예외가 발생하는 경우 잘못 동작할 수 있으므로 주의하세요. atexit
등록된 함수(그러나 이 후크를 사용하지 않더라도 동작은 이상했을 것입니다).
다른 팁
전화하면
import os
os._exit(0)
종료 핸들러는 귀하 또는 애플리케이션의 다른 모듈에 의해 등록된 핸들러가 호출되지 않습니다.
등록된 종료 핸들러를 피하기 위해 os._exit()를 호출하는 것 외에도 처리되지 않은 예외도 포착해야 합니다.
import atexit
import os
def helloworld():
print "Hello World!"
atexit.register(helloworld)
try:
raise Exception("Good bye cruel world!")
except Exception, e:
print 'caught unhandled exception', str(e)
os._exit(1)
제휴하지 않습니다 StackOverflow