В Python, попробуйте
и кроме
Блоки часто используются программистами для обработки любых исключений или несчастных сценариев. Наконец-то пункт очень по достоинству и может быть лучше использован. Давайте проверим, как Финальный блок работает.
Неважно, что произошло ранее, последний блок выполняется после завершения блока кода, и любые поднятые исключения обрабатываются. Даже если есть ошибка в обработчике исключений или остального блока, а новое исключение поднимается, код в финальном блоке все еще работает.
Эта цитата из Python Документация абсолютно правильно, но поведение исполнения мало сложно, когда пытаться
и Наконец
Блоки инкапсулированы в рамках функции, которая имеет вернуть
утверждение. Позвольте мне объяснить с примерами. Посмотрите, можете ли вы угадать вывод следующих функций.
# Both the try & final blocks have print statements and function returns value from final-block def example_1(): try: val = 1 print(f"Print: Try Block - {val}") finally: val = val + 1 print(f"Print: Finally Block - {val}") return f"Return: Finally Block - {val}" example_1()
Функция example_1
Просто и прямо, сначала попробуйте блок выполняется, а затем окончательный блок. Переменная валь
имеет ценность 1 в попробуйте блок и обновляется до 2 в Финальный блок Отказ
# The try block has return statement & final block has only print statement def example_2(): try: val = 1 print(f"Print: Try Block - {val}") return f"Return: Try Block - {val}" finally: val = val + 1 print(f"Print: Finally Block - {val}") example_2()
Функция example_2
где вещи становится немного сложно, вернуть
Заявление в попробуйте блок выполняется после Финальный блок Но значение переменной валь
Вернувшиеся не влияют изменения, сделанные в Финальный блок Отказ
# Both the try & final blocks have return statements def example_3(): try: val = 1 print(f"Print: Try Block - {val}") return f"Return: Try Block - {val}" finally: val = val + 1 print(f"Print: Finally Block - {val}") return f"Return: Finally Block - {val}" example_3()
Вывод функции example_3
легко догадаться. Когда вернуть
Заявление в Финальный блок выполняется, функция выходит из-за того, что вернуть
Заявление в попробуйте блок никогда не выполняется.
попробуйте
& Наконец
Блоки не так прямы, как можно подумать, особенно когда они возвращают значения из функции. Для более таких интересных Tidbits следуют за мной через Twitter Отказ На вынос от этого поста:
- Где вы положили
вернуть
Заявление будет иметь значение. - Хотя …| вернуть
заявление от
попробуйте блок выполняется после Финальный блок , значение возврата переменных не будет затронута изменением, сделанным в Финальный блок Отказ
Оригинал: “https://dev.to/6aravind/do-you-really-understand-try-finally-in-python-1acp”