擅长:python、mysql、java
<p>我不确定这是否可能<code>__enter__</code>是在<code>with</code>语句引入的<code>try</code>块之外执行的,因此我看不到直接从<code>__enter__</code>跳到<code>__exit__</code>的方法</p>
<p><code>with</code>基本上(简化)是这样的:</p>
<pre><code>with context as x:
do_something()
</code></pre>
<p>进入</p>
<pre><code>x = context.__enter__()
try:
do_something()
finally:
context.__exit__()
</code></pre>
<p>您需要在<code>do_something()</code>中抛出一个异常,或者成功完成它以进入<code>__exit__</code>。如果您确实从<code>do_something()</code>抛出异常,您可以在<strong>退出</strong>函数中(使用传递给它的一些参数)抑制异常,这样您就看不到它了。但是它必须是<code>with</code>块中的代码,它以某种方式导致跳转到<code>__exit__</code></p>
<p>也许,如果您可以通过在<code>__enter__</code>中设置一些值来确保<code>do_something</code>立即抛出异常,那么您就可以使它正常工作。但对我来说,这听起来不是个好主意</p>