gpt4 book ai didi

python - 在 Python 中使用资源的优雅方式?

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:27 26 4
gpt4 key购买 nike

我想找到一种优雅的方式来执行以下操作:

try:
with some_resource:
# got it
do_something()

except ResourceUnavailableError:
# didn't get it
do_something_else()

这个:

  1. 尝试获取资源
  2. 成功后,它会做一些事情,然后正确地释放资源
  3. 失败时,它会做其他事情

虽然代码行数不多,但我发现如果我必须在很多不同的地方一直写这个,它不是很优雅。

我几乎希望我能写出如下内容(我知道这不是真正的 Python 代码):

with some_resource:
# got it
do_something()

# an optional else
else:
# didn't get it
do_something_else()

有谁知道是否可以在 Python 中按照这些思路编写一些东西?谢谢!!

最佳答案

不,with 没有else block 。但是您可以编写自己的上下文管理器来处理 else 部分:

from contextlib import contextmanager

@contextmanager
def handle_unavailable(resource, exception, exception_handler):
try:
with resource:
yield resource
except exception:
exception_handler()

并像这样在任何地方使用它:

with handle_unavailable(some_resource, ResourceUnavailableError, do_something_else):
do_something()

因此,如果在 with block 中引发了 ResourceUnavailableError,则会为您调用 do_something_else

这利用了 @contextlib.contextmanager() decorator ,这使得编写您自己的上下文管理器变得几乎微不足道。

关于python - 在 Python 中使用资源的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951000/

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