<p>是的。您不仅应该在此处引发异常,而且还必须在此处引发异常。<a href="https://docs.python.org/3.6/library/stdtypes.html#iterator.__next__" rel="nofollow noreferrer">This is what the iterator protocol calls for</a>:</p>
<blockquote>
<p><code>iterator.__next__()</code></p>
<blockquote>
<p>Return the next item from the container. If there are no further items, raise the <code>StopIteration</code> exception. [...]</p>
</blockquote>
</blockquote>
<p>你是正确的,当程序处于异常状态时应该引发异常(是的,我知道这听起来很多余)。但是,Python中的异常与大多数语言不同。Python中的异常用于核心语言特性,比如迭代,它们比条件语句更受欢迎。Python中常见的习惯用法是<a href="https://docs.python.org/3/glossary.html#term-eafp" rel="nofollow noreferrer">"It's easier to ask for foreignness instead of permission"</a>:</p>
<blockquote>
<p>Easier to ask for forgiveness than permission. This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many try and except statements. The technique contrasts with the LBYL style common to many other languages such as C. </p>
</blockquote>
<p>还对<a href="https://docs.python.org/3/reference/compound_stmts.html#the-try-statement" rel="nofollow noreferrer">^{<cd1>}</a>语句进行了微调,以允许用户控制异常的处理方式。它允许<code>else</code>,<code>finally</code>,以及多个<code>except</code>分支与之结合使用。在</p>