擅长:python、mysql、java
<p>如果运行此代码:</p>
<pre><code>class A(object):
def __enter__(self):
return self
def __exit__(self, *args):
print "exit", self
class B(object):
def __enter__(self):
return self
def __exit__(self, *args):
print "exit", self
raise Exception
with A() as a, B() as b:
pass
</code></pre>
<p>您将看到,即使其中一个出现错误,<code>__exit__</code>都会被调用(在<code>B</code>之前是<code>A</code>,在<code>A</code>之前是{<cd3>})。在</p>
<p>如果您从单个集合<code>__exit__</code>调用这两个<code>__exit__</code>,如果第一个集合有错误,第二个{<cd1>}将不会被调用。在</p>
<p>使用嵌套上下文管理器代替,假设您有少量的固定数量的上下文管理器。在</p>