を使用しているために例外が発生してから飲み込まれる可能性は強力な議論ですが、またはの代わりcontinueにを使用すると例外も飲み込まれます。breakreturn
たとえば、これは機能し、例外は飲み込まれます。
for i in range(10):
print i
try:
raise Exception
finally:
break
print i # not gonna happen
これもエラーなしで機能し(関数内の場合)、例外も飲み込まれます。
for i in range(10):
print i
try:
raise Exception
finally:
return
print i # not gonna happen
では、発生する可能性のあるエラーの有無にかかわらず、なぜブロック内で許可されるのbreakでしょうか。returnfinallycontinue
この問題では、次の要素の組み合わせを検討することもできます。
finally常に実行されます。
continue現在の反復を「中止」します。
これは、各ループ内で、finally常に実行されているため、常にcontinue魔女が「現在の反復を中止」、「現在の反復を中止」、「現在の反復を中止」と言うことを意味します...魔女は実際には意味がありません。breakしかし、とを使用することも意味がありませんreturn。現在の反復も中止されますが、唯一の違いは、1回の反復で終わることです。
それで、「なぜcontinue許可されないのfinallyですか?」という質問があります。「なぜ許可されているのか」breakと尋ねることもできます。return
たぶん、その時点でそうしないことが理にかなっているからですか?それは開発者の決定でしたが、今はそうですか?確かに、それは実装者の怠惰かもしれませんが、おそらく彼らは何かを念頭に置いていたのかもしれませんし、Pythonの別のバージョンでは、別の方法でそれを持っている方が理にかなっていますか?
ここでの例は極端なものであるという考え方です。そのようなコードを書くだけではありませんか?finallyブロックには、いつ、何でも言うためのロジックが必ずあり、break/return/continueそのように鈍くするだけではありません。そのため、この制限のコード回避策にcontinue頼るのではなく、必要に応じてinfinallyを使用してクリーンなコードを記述していただければ幸いです(つまり、Pythonの哲学では「私たちはすべてここで大人に同意しています」 )。continuefinally