28

次のコードになります:

while True:
    try:
        print("waiting for 10 seconds...")
        continue
        print("never show this")
    finally:
        time.sleep(10)

常に「10 秒待っています...」というメッセージを出力し、10 秒間スリープして、もう一度実行しますか? finallyつまり、ループがcontinue-edの場合でも、句内のステートメントは実行されますか?

4

3 に答える 3

33

python docsから:

return、break、または continue ステートメントが try...finally ステートメントの try スイートで実行されると、finally 句も「途中で」実行されます。finally 節での continue ステートメントは不正です。(理由は、現在の実装の問題です — この制限は将来解除される可能性があります)。

于 2012-05-11T03:15:36.197 に答える
4

ドキュメントでは、このシナリオがどのように展開するかを説明するために、やや不明確な言葉 (「進行中」) を使用しています。continue ステートメントが例外句内で実行される場合、finally 句のコードが実行され、ループは次の繰り返しに進みます。

これは、動作を示す非常に明確な例です。

コード:

i=0
while i<5:
    try:
        assert(i!=3) #Raises an AssertionError if i==3
        print("i={0}".format(i))
    except:
        continue
    finally:
        i+= 1; #Increment i

'''
Output:

i=0
i=1
i=2
i=4
'''
于 2018-10-12T22:52:52.790 に答える