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". введите описание изображения здесь