Подтвердить что ты не робот

Python: использование продолжения в инструкции try-finally в цикле

Будет ли следующий код:

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

Всегда печатайте сообщение "Ожидание 10 секунд...", сон в течение 10 секунд и повторите его снова? Другими словами, выполняются ли операторы в выражениях finally, даже если цикл continue -ed?

4b9b3361

Ответ 1

Из python docs:

Если в наборе try из инструкции try... finally выполняется оператор return, break или continue, предложение finally также выполняется "на выходе". Оператор continue является незаконным в предложении finally. (Причина - проблема с текущей реализацией - это ограничение может быть отменено в будущем).

Ответ 3

Документация использует немного неясный язык ("на выход"), чтобы объяснить, как этот сценарий заканчивается. Если оператор 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
'''

Ответ 4

Наконец, вы можете сделать это, CPython 3.8 делает это утверждение действительным:

Оператор continue недопустим в предложении finally из-за проблемы с реализацией. В Python 3.8 это ограничение было снято. (что нового)