5 примеров в Python для обработки исключений с помощью try, except и finally

Исключения в python являются ошибками, генерируемыми синтаксически правильными утверждениями.
Они прекращают выполнение сценария. Некоторыми примерами исключений являются NameError, TypeError, AssertionError, ConnectionAbortedError и т. д.
Исключения могут быть обработаны, чтобы предотвратить непредсказуемое завершение сценария.
Эта статья охватывает следующие примеры:
- Блок try-except в Python
- Обработка множественных исключений в Python
- Блок finally в Python — когда происходит исключение
- Блок finally в Python — когда нет исключений
- Вложенный блок try-except в Python
Посмотрите на следующий код:
t a = 12 s = "привет" print(a+s)
Вывод:
Traceback (most recent call last): File "<stdin>", line 3, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
Здесь синтаксис функции печати правильный, но добавление целого числа и строки неверно. Следовательно, TypeError вызывается интерпретатором Python.
1. Блок try-except в Python
Ключевые слова, вовлеченные в обработку исключений, являются try, except и finally.
Блок try должен сопровождаться блоком исключения. Добавление блока finally не является обязательным.
Операторы в блоке try выполняются построчно. Если выполнение какого-либо оператора выдает исключение. Остальные операторы в этом блоке пропускаются, и начинается выполнение кроме блока.
Пример:
a = 12
s = "привет"
try:
print("внутри try")
print(a + s) # поднимет исключение TypeError
print("Печать с использованием исходных типов данных")
except TypeError: # будет обрабатывать только TypeError
print("внутри, за исключением")
print(str(a) + s)
print("Печать с использованием type-casted типов данных")
Вывод:
внутри try внутри, за исключением 12привет Печать с использованием type-casted типов данных
Здесь TypeError был вызван при выполнении строки 2 внутри блока try. Следовательно, выполнение остальных операторов было пропущено и, кроме выполнения блока, началось. Обратите внимание, что исключения, которые нужно обработать, упоминаются ключевое слово except.
2. Обработка множественных исключений в Python
Многочисленные исключения могут быть обработаны с помощью одного блока try-кроме. Это делается путем упоминания имен исключений, разделенных запятыми внутри скобок, сразу после ключевого слова кроме.
try:
if (3 + 4 - 5) > 0:
a = 3
a.append("привет") # Выбрасывает AttributeError
else:
print("привет" + 4) # Выбрасывает TypeError
except (AttributeError, TypeError) as e:
print("Произошла ошибка:", e)
Вывод:
Произошла ошибка: 'int' object has no attribute 'append'
3. Блок finally в Python наконец — когда происходит исключение
Блок finally, который находится после блока except. Этот блок операторов выполняется независимо от того, было ли обнаружено исключение или нет.
Добавление блока finally к предыдущему примеру:
try:
if (3 + 4 - 5) > 0:
a = 3
a.append("привет") # выбрасывает атрибут ошибки
else:
print("привет" + 4) # выбрасывает TypeError
except (AttributeError, TypeError) as e:
print("Произошла ошибка:", e)
finally:
print("Блок try except успешно выполнен")
Вывод:
Произошла ошибка: 'int' object has no attribute 'append' Блок try except успешно выполнен
Здесь операторы в try вызывают исключение, за исключением того, что был выполнен блок и затем блок finally.
4. Блок finally в Python — когда нет исключений
Посмотрим на другой пример:
try:
if (3 + 4 - 5) < 0:
a = 3
print(a + 5) # простое добавление
else:
print("привет" + "4") # конкатенация строк
except (AttributeError, TypeError) as e:
print("Произошла ошибка:", e)
finally:
print("Блок try except успешно выполнен")
Вывод:
8 Блок try except успешно выполнен
Здесь мы видим, что блок finally был выполнен, даже если блок исключений никогда не выполнялся.
Если операторы внутри блока except и finally выдают исключение, выполнение оставшегося сценария будет прекращено.
5. Вложенный в Python блок try-except
Блок try-except может быть окружен другим блоком try-except.
import json
import sys
try:
with open("привет.json") as fp:
try:
json_dict = json.load(fp)
except json.JSONDecodeError:
print("Файл Json не существует")
print(json_dict)
except:
print("Произошла ошибка при разборе json:", sys.exc_info()[1])
Вывод: если привет.json существует
{'name': 'AndreyEx', 'surname': 'Andrey'}
Вывод: если привет.json не существует
Произошла ошибка при разборе json: [Errno 2] No such file or directory: 'привет.json'
Вывод: если привет.json не является допустимым файлом json
Файл Json не существует произошла ошибка при разборе json: name 'json_dict' is not defined
Эта форма решения может обрабатывать исключение, возникающее внутри блока except или finally.