gpt4 book ai didi

python - 获取使用@contextmanager 创建的上下文管理器以在异常情况下正常工作

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

我有以下代码

from contextlib import contextmanager

@contextmanager
def simple_context_manager():
print("starting context manager")
yield
print("finished context manager")

try:
with simple_context_manager():
raise RuntimeError
except RuntimeError:
print("Caught the error")
print("Moving on")

现在打印出来

starting context manager
Caught the error
Moving on

这告诉我上下文管理器没有关闭。我怎样才能让它关闭并打印“完成的上下文管理器”行?

因为我正在使用装饰器,所以我没有我认为应该根据 this 调用的专用 __exit__ 函数.

所以我不确定如何让我的上下文管理器在其上下文内部发生错误的情况下退出。

最佳答案

你最终需要尝试一下:

@contextmanager
def simple_context_manager():
print("starting context manager")
try:
yield
finally:
print("finished context manager")

如果异常从with 语句传播出去,@contextmanager 装饰器将throwyield 处进入装饰生成器的异常。 finally 让我们无论是否发生异常都执行清理 block ,因此我们使用它。

关于python - 获取使用@contextmanager 创建的上下文管理器以在异常情况下正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545893/

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