Распознавание распространенных исключений
На этом шаге мы рассмотрим распространенные исключения (exceptions). В отличие от синтаксических ошибок, исключения возникают во время выполнения программы (runtime). Код синтаксически корректен, но ошибка происходит в процессе его работы.
Файл common_exceptions.py готов для вас в директории ~/project.
Сначала вызовем ZeroDivisionError (ошибку деления на ноль). Откройте common_exceptions.py в редакторе и добавьте следующий код:
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
Сохраните файл и запустите его из терминала:
python common_exceptions.py
Программа начнет выполняться, но остановится и отобразит ZeroDivisionError. Математически деление на ноль не определено, и Python вызывает это исключение, чтобы указать на проблему.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 3, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
Далее, спровоцируем NameError. Это происходит, когда вы пытаетесь использовать переменную, которая еще не была определена. Замените содержимое common_exceptions.py следующим:
print(undefined_variable)
Сохраните файл и запустите его:
python common_exceptions.py
Вы получите NameError, потому что интерпретатор не знает, на что ссылается undefined_variable.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print(undefined_variable)
NameError: name 'undefined_variable' is not defined
Теперь посмотрим на TypeError. Это происходит, когда вы пытаетесь выполнить операцию над объектом неподходящего типа. Замените содержимое common_exceptions.py этим кодом:
print("Hello" + 5)
Сохраните и запустите скрипт:
python common_exceptions.py
Вы увидите TypeError. Python не позволяет напрямую складывать строку (str) и целое число (int).
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print("Hello" + 5)
TypeError: can only concatenate str (not "int") to str
Наконец, продемонстрируем IndexError. Это происходит, когда вы пытаетесь получить доступ к элементу последовательности (например, списка) по индексу, который выходит за допустимые границы. Замените содержимое common_exceptions.py следующим:
my_list = [1, 2, 3]
print(my_list[5])
Сохраните и запустите скрипт:
python common_exceptions.py
Вы получите IndexError. Список my_list содержит три элемента, поэтому допустимые индексы — 0, 1 и 2. Доступ по индексу 5 невозможен.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 2, in <module>
print(my_list[5])
IndexError: list index out of range
Понимание этих распространенных исключений является ключевой частью обучения отладке кода на Python.