如何处理异常退出错误,例如,在异常退出之前执行某个功能?

时间:2017-06-12 23:47:58

标签: python python-3.x exit

例如,在长时间重复的蒙特卡罗运行期间,我想在程序正常退出之前终止我的程序(就像10000MC运行一样,我希望在5000次运行完成后终止。但我仍然希望得到结果之前的5000次运行。),或者遇到了一些意想不到的错误,它突然退出,失去了之前的结果。是否有可能在PYTHON异常退出之前执行一个功能(比如保存一些我想要的结果/变量),以便我可以保持已经获得的结果?

1 个答案:

答案 0 :(得分:0)

您可以将代码包装在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中间中断脚本,目前为止获得的结果仍然会被保存。