我一直認為一個耗盡的迭代器會引發StopIteration,然后一個回圈捕獲它。這似乎與https://bugs.python.org/issue31156 中所說的一致。現在,運行任何
a=[1,3]
itr = iter(a)
while True:
next(itr)
next(itr)
next(itr)
a=[1,3]
itr = iter(a)
for itr1 in itr:
next(itr)
next(itr)
next(itr)
崩潰。這似乎與上面鏈接中所說的不符:
在 while 回圈體中引發的 StopIteration 例外將終止(并被)while 回圈,從而導致正常終止。
行為改變了嗎?
uj5u.com熱心網友回復:
for像一個回圈
for x in y:
<body>
大致相當于
itr = iter(y)
while True:
try:
x = next(itr)
except StopIteration:
break
<body>
(我說“大致”,因為沒有像itr回圈體這樣的名稱,我沒有處理回圈的else子句for等)
請注意,StopIteration是只有當被隱式呼叫提高到抓next用來設定的值x,如果沒有的東西在回圈體中提出。
還要注意記者在(現已關閉)問題中的最后一條評論:
對不起,這是我對發生的事情的誤解。我一直在絆倒我寫的一個舊程式,但顯然它有效,因為 while 回圈在一個生成器函式中,并且 StopIteration 被簡單地傳遞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377715.html
上一篇:使用函式從陣列中洗掉專案
下一篇:用于過濾和替換例外值的回圈
