如何处理异常退出错误,比如在函数异常退出之前执行一个函数?

How can I handle abnormal exit error, for example, performing a function before it exit abnormally?

例如,在长时间重复的 Monte Carlo 运行中,我想在程序正常退出之前终止我的程序(比如 10000MC 运行,我想在 5000 次运行完成后终止。但我仍然想要获得之前 5000 次运行的结果。),或者它 运行 出现一些意外错误,它会突然退出并丢失之前的结果。是否可以在 PYTHON 中异常退出之前执行一个功能(比如保存一些我想要的 results/variables ),以便我可以保留已经获得的结果?

您可以将代码包装在try/finally 中,并将获得的结果保存到finally 语句中的文件中。无论您的代码是否异常退出,这都会执行 finally 中的代码。异常退出包括您通过按 CTRL+C(引发 KeyboardInterrupt 异常)故意中断脚本中途执行的情况。

import pickle

def MC_SIMULATION():
    # your code
    return something

results = []
i = 0
try:
    for _ in range(10000):
        results.append(MC_SIMULATION())
        i += 1
finally: #runs whether or not an exception was raised in the try statement
    with open("MC_"+str(i)+".pickle",'w') as f:
        pickle.dump(results, f)

现在您可以等待脚本完成并保存结果,或者在中间使用 CTRL+C 中断它,目前获得的结果仍将被保存。