考虑以下代码:
async with app:
...
async with app.resource as rsrc:
...
async with rsrc.foo as bar:
...
大量嵌套的with
或async with
语句对代码的可读性有负面影响,特别是在测试中,同一子句可能会被多次重用。你知道吗
在像D这样的语言中,有一个scope(exit) ...
构造,它允许您将代码附加到范围终结器列表中—这个代码将在范围离开后执行,允许您有效地执行__exit__
所做的操作,但不添加缩进。你知道吗
有没有办法在Python中展平with
并执行类似的操作?你知道吗
await async_with(app)
scope_exit(app.quit)
...
rsrc = await async_with(app.resource)
scope_exit(rsrc.release)
...
bar = await async_with(rsrc.foo)
scope_exit(lambda: bar.unfrob())
...
或者,是否有一种方法可以在退出作用域时可靠地执行任意代码?你知道吗
据我所知,你不能达到你想要的。尤其是因为不可能定义这样的“范围”。你知道吗
即使在伪代码中:
什么样的背景应该[不]抓住它?你知道吗
我可能错了,但是设置捕获异常的“保护”的唯一方法是
try/except
子句。with
大致是它的一个包装器。你知道吗说到动机,如果你对嵌套的上下文管理器有太大的问题,你可能应该重构你的核心,将内部上下文提取为函数。您可以查看contextlib以获得帮助
我受不了
with
语句中的额外缩进。。。我就是这么做的:嵌套:
扁平化:
相关问题 更多 >
编程相关推荐