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

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

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

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

2 ответа

Решение

Из документации по питону:

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

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

Теперь, начиная с последней версии python (3.8.4), "continue" можно использовать внутри блоков "finally". введите описание изображения здесь

Другие вопросы по тегам