如果python脚本在任何时候崩溃了,有没有办法给它提供一个命令?

2024-04-20 01:07:50 发布

您现在位置: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()

Tags: 方法inimport命令脚本addforws
3条回答

这就是上下文管理器的用途(with语句)。工作簿类实际上提供了必要的内容。你知道吗

就这么简单

with xlsxwriter.Workbook('hello_world.xlsx') as workbook:
    worksheet = workbook.add_worksheet()
    [...]

Workbook documentation


如果您还想做其他事情,try ... except ... else ... finally语句就是您所需要的。见documentation

对于调用close方法的特定情况(对象本机不支持上下文管理协议,因此不能在with语句中使用它),可以通过try/finally对其进行包装,使其与with语句兼容,从而替换代码:

ws = wb.add_worksheet()
for i in range (len(list)):
    ws.write(i,0,"Hello World!")

使用(将import contextlib添加到文件顶部):

with contextlib.closing(wb.add_worksheet()) as ws:
    for i in range(len(list)):
        ws.write(i,0,"Hello World!")

当块退出时无条件地调用close,无论是异常调用return,还是只是自然地无错误地离开块或return(这通常是您想要的)。如果出于某种原因,您只想在出现异常时调用它,则可以执行以下操作:

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

这只会在异常发生时close,并且会重新释放异常(因为在这种情况下,静默地继续可能是错误的)。你知道吗

嗯。一般来说,这可以通过以下方法解决:

try:
     code that produces error
finally:
     cleanup()

相关问题 更多 >