如果python脚本在任何时候崩溃,有没有办法为它提供一个命令?
我对try很熟悉,除了。不过,我正在寻找一种更通用的方法,它只需在引发任何错误后脚本停止运行之前运行一个简单的命令 例如,如果我正在使用xlsxwriter:如果python脚本在任何时候崩溃,有没有办法为它提供一个命令?,python,Python,我对try很熟悉,除了。不过,我正在寻找一种更通用的方法,它只需在引发任何错误后脚本停止运行之前运行一个简单的命令 例如,如果我正在使用xlsxwriter: import xlsxwriter wb = xlssxwriter.Workbook ws = wb.add_worksheet() for i in range (len(list)): ws.write(i,0,"Hello World!") #If this script fails, run ws.close() 嗯
import xlsxwriter
wb = xlssxwriter.Workbook
ws = wb.add_worksheet()
for i in range (len(list)):
ws.write(i,0,"Hello World!")
#If this script fails, run ws.close()
嗯。一般来说,这可以通过以下方式解决:
try:
code that produces error
finally:
cleanup()
对于调用
close
方法的特定情况(对象本机不支持上下文管理协议,因此不能在with
语句中直接使用它),您可以对进行一些改进,最后尝试将其包装成与语句兼容,替换您的代码:
ws = wb.add_worksheet()
for i in range (len(list)):
ws.write(i,0,"Hello World!")
使用(将import contextlib
添加到文件顶部):
当块退出时,无条件地调用close
,无论是异常情况下,return
,还是只是自然无误地离开块或return
ing(这通常是您想要的)。如果出于某种原因,您只想在出现异常时调用它,则可以执行以下操作:
ws = wb.add_worksheet()
try:
for i in range (len(list)):
ws.write(i,0,"Hello World!")
except: # Okay to use bare except because we re-raise after cleanup
ws.close()
raise # Re-raise whatever exception led us here now that cleanup is done
这将仅在异常发生时关闭,并将重新引发异常(因为在此场景中以静默方式继续可能是错误的)。这就是上下文管理器的作用(带语句的)。工作簿类实际上提供了所需的内容
这很简单
with xlsxwriter.Workbook('hello_world.xlsx') as workbook:
worksheet = workbook.add_worksheet()
[...]
看
如果您还想做其他事情,尝试。。。除了其他的最后,您需要的是
语句。请参见正如Joonatan Samuel在其回答中所建议的,您可能希望运行ws.close(),而不管成功与否(这是最终将给您的结果)。如果您希望它只在失败时运行,请使用except。这是一个伟大而简单的解决方案!我喜欢contextlib的强大功能,这可能适用于多种方法
with xlsxwriter.Workbook('hello_world.xlsx') as workbook:
worksheet = workbook.add_worksheet()
[...]