如何在上下文管理器的__exit__中处理异常?

问题描述 投票:8回答:1

我知道从上下文管理器的__exit__()方法中重新引发异常是不好的样式。因此,我想在实例上添加一个属性,该属性可以携带上下文信息,如果我让异常缓慢通过或捕获到它,则该属性将不可用。这样可以避免重新筹集资金。

在异常上附加属性的替代方法是吞下该异常,在作为实例的上下文管理器兼作实例的实例上设置一些状态,然后再检查该状态。问题是,这将导致渔获22,不是吗?由于该异常意味着with块内的执行正在退出。除了再次进入with块外,没有其他方法可以重复操作,对吗?因此,一旦__exit__()方法返回,我尝试存储上下文信息的实例就会消失。

因此,总之,在__exit__()方法中,如何处理未决的实际异常(如果是,我将假定为该问题给出的那个异常?)>

我知道从上下文管理器的__exit __()方法中重新引发异常是不好的样式。因此,我想在实例上添加一个属性,该属性可以携带不是...

python python-2.x contextmanager
1个回答
7
投票

上下文管理器不会仅仅因为该块退出而消失。您可以通过两种方式保存它:

  1. 首先创建上下文管理器,将其分配给变量,然后将with与该对象一起使用:

© www.soinside.com 2019 - 2024. All rights reserved.