문제

보시다시피, 프로그램이 죽은 후에도 무덤에서 말을 하고 있습니다.예외 발생 시 종료 기능을 "등록 취소"하는 방법이 있습니까?

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top