我有一个我编写的 python 脚本,它使用 atexit.register() 来运行一个函数,以便在程序退出时保留一个字典列表。但是,当脚本由于崩溃或运行时错误而退出时,此代码也会运行。通常,这会导致数据损坏。
当程序异常退出时,有什么办法阻止它运行?
编辑:为了澄清,这涉及使用烧瓶的程序,我试图防止数据持久性代码在因引发错误而导致的退出上运行。
您不想atexit
与 Flask 一起使用。您想使用Flask 信号。听起来您正在专门寻找request_finished
信号。
from flask import request_finished
def request_finished_handler(sender, response, **extra):
sender.logger.debug('Request context is about to close down. '
'Response: %s', response)
# do some fancy storage stuff.
request_finished.connect(request_finished_handler, app)
的好处request_finished
是它只有在成功响应后才会触发。这意味着只要另一个信号没有错误,你应该是好的。
一种方式:在主程序的全局级别:
abormal_termination = False
def your_cleanup_function():
# Add next two lines at the top
if abnormal_termination:
return
# ...
# At end of main program:
try:
# your original code goes here
except Exception: # replace according to what *you* consider "abnormal"
abnormal_termination = True # stop atexit handler
不漂亮,但直截了当;-)