我知道从上下文管理器的__exit__()
方法中重新引发异常是不好的样式。因此,我想在实例上添加一个属性,该属性可以携带上下文信息,如果我让异常缓慢通过或捕获到它,则该属性将不可用。这样可以避免重新筹集资金。
在异常上附加属性的替代方法是吞下该异常,在作为实例的上下文管理器兼作实例的实例上设置一些状态,然后再检查该状态。问题是,这将导致渔获22,不是吗?由于该异常意味着with
块内的执行正在退出。除了再次进入with
块外,没有其他方法可以重复操作,对吗?因此,一旦__exit__()
方法返回,我尝试存储上下文信息的实例就会消失。
因此,总之,在__exit__()
方法中,如何处理未决的实际异常(如果是,我将假定为该问题给出的那个异常?)>
我知道从上下文管理器的__exit __()方法中重新引发异常是不好的样式。因此,我想在实例上添加一个属性,该属性可以携带不是...
上下文管理器不会仅仅因为该块退出而消失。您可以通过两种方式保存它:
首先创建上下文管理器,将其分配给变量,然后将with
与该对象一起使用: