2.1 Создание исключений
Не можешь победить — возглавь. Если мы не можем избежать возникновения ошибок в программе, мы должны научиться их контролировать. А для этого давайте научимся сознательно создавать исключения.
Самый простой пример исключения — это деление на ноль. Ну и программа тоже простая:
x = 100 / 0
Такой код выполнится с ошибкой:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError
— это название исключения, а division by zero
— его краткое описание. Также Python сообщит номер строки, где это исключение возникло.
Несоответствие типов данных
Разумеется, возможны и другие исключения. Например, при попытке сложить строку и число:
s = "100" + 100
Произойдет исключение TypeError
:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Выход за границы списка
Еще одна очень распространенная ошибка, генерирующая исключение — это попытка обратиться к элементу, которого нет в списке:
my_list = [1, 2, 3]
print(my_list[10])
Произойдет исключение IndexError
:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Сколько же их всего? Есть тысячи разных типов исключений. Более того, вы можете создать свои, если вам не хватит существующих для описания какой-нибудь специфической ситуации. Хотя самых популярных не так уж и много.
2.2 Список самых популярных исключений
Исключений много, но вам, как новичку, будет полезно узнать о самых популярных. Ниже я приведу таблицу с ними:
Исключение | Описание |
---|---|
Exception |
Базовый класс для всех исключений. |
IndexError |
Возникает при обращении к несуществующему индексу в последовательности (например, список или кортеж). |
KeyError |
Возникает при обращении к несуществующему ключу в словаре. |
NameError |
Возникает при обращении к несуществующей переменной. |
RuntimeError |
Возникает при общей ошибке времени выполнения, не относящейся к другим типам исключений. |
StopIteration |
Возникает для сигнализации об окончании итерации. |
SyntaxError |
Возникает при синтаксической ошибке в коде. |
IndentationError |
Возникает при ошибке отступов в коде (подтип SyntaxError ). |
TabError |
Возникает при смешивании табуляций и пробелов для отступов (подтип IndentationError ). |
TypeError |
Возникает при попытке выполнения операции с несовместимыми типами данных. |
UnboundLocalError |
Возникает при обращении к локальной переменной до её объявления (подтип NameError ). |
ValueError |
Возникает при передаче функции или операции аргумента с неправильным значением. |
ZeroDivisionError |
Возникает при делении на ноль. |
Скорее всего, вы, как новичок, в первый месяц своей учебы столкнетесь со всеми этими ошибками. И в этом нет ничего плохого — учатся только на ошибках.
2.3 Ошибки в коде
Давайте разберем еще несколько ситуаций, когда в коде возникают ошибки, чтобы вы легче потом их находили в своем коде:
IndentationError
Этот тип ошибки возникает, когда отступы в коде сделаны неправильно. Например, смешивание табуляций и пробелов или неправильное количество отступов.
def example():
print("Hello")
print("World") # Неправильный отступ вызывает IndentationError
example()
NameError
def example():
print(undeclared_variable) # Попытка использовать необъявленную переменную вызывает NameError
example()
ValueError
Этот тип ошибки возникает, когда операция или функция получает аргумент правильного типа, но с неподходящим значением.
def example():
int("abc") # Попытка преобразовать строку, не являющуюся числом, вызывает ValueError
example()
KeyError
Этот тип ошибки возникает, когда программа пытается получить доступ к несуществующему ключу в словаре.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Попытка доступа к несуществующему ключу вызывает KeyError
example()
SyntaxError
Этот тип ошибки возникает, когда в коде есть синтаксическая ошибка, то есть код не соответствует грамматике языка Python.
def example():
eval("if True print('Hello')") # Неправильный синтаксис вызывает SyntaxError
example()
Кто предупрежден, тот вооружён. Теперь вы можете распознавать и создавать ситуации, которые вызывают ошибки. Настало время научиться обрабатывать эти ошибки.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ