gpt4 book ai didi

python - 仅在引发异常时清理对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:52 25 4
gpt4 key购买 nike

如果不是所有必须对其执行的操作都成功(即,如果引发异常),我需要删除一个文件。它可以像使用 except: 一样简单,删除文件然后重新引发异常,但在这种情况下,如果文件不能在 中删除,则原始异常将丢失except 出于任何神秘原因的子句。

我能想到的最好的是:

try:
file_path = "whatever.jpg"
# do stuff with file
except:
exception_raised = True
raise
finally:
try:
if exception_raised:
os.unlink(file_path)
except:
pass

return file_path # everything OK

有人知道更好、更 Pythonic 的方法吗?

最佳答案

如果不想丢失异常,另一种选择是简单地存储异常:

Python 3.x 版本:

try:
file_path = "whatever.jpg"
# do stuff with file
except BaseException as e:
try:
os.unlink(file_path)
except Exception:
traceback.print_exc()
raise e

Python 2.x 版本稍微复杂一些,因为您需要手动存储完整的异常信息(否则您将丢失回溯):

try:
file_path = "whatever.jpg"
# do stuff with file
except:
e = sys.exc_info()
try:
os.unlink(file_path)
except Exception:
traceback.print_exc()
raise e[0], e[1], e[2]

编辑:只捕获内部 try block 中 Exception 的子类,因为您不想捕获 SystemExitKeyboardInterrupt 在这里。还要报告在取消链接期间发生的任何异常,而不仅仅是丢弃它。

关于python - 仅在引发异常时清理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7687012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com