擅长:python、mysql、java
<p>我认为<code>throw()</code>方法之所以有用有很多原因。</p>
<ol>
<li><p>对称性:没有强烈的理由认为异常情况应该只在调用者中处理,而不是在生成器函数中处理。(假设从数据库读取值的生成器返回一个错误值,并且假设只有调用方知道该值是错误的。使用<code>throw()</code>方法,调用者可以向生成器发出信号,指出存在必须纠正的异常情况。)如果生成器可以引发异常,而被调用者截获,则也可以进行相反的操作。</p></li>
<li><p>灵活性:生成器函数可能有多个<code>yield</code>语句,调用方可能不知道生成器的内部状态。通过抛出异常,可以将生成器重置为已知状态,或者实现更复杂的流控制,这对于单独使用<code>next()</code>、<code>send()</code>、<code>close()</code>是非常麻烦的。</p></li>
</ol>
<p>询问用例可能会产生误导:对于每个用例,您可以生成一个反例,而无需使用<code>throw()</code>方法,并且讨论将一直持续下去。。。</p>