В этой статье вы узнаете о типах ошибок, которые вызываются интерпретатором, если что то в вашей программе идет не так. Все типы ошибок в Python можно разделить на два класса.
- Синтаксические ошибки
- Логические ошибки
При возникновении, какой либо ошибки, которую программа не может обработать, вызывается тип ошибки указывающая на проблему. Избежать эти ошибки поможет нам обработка исключений в Python.
Синтаксические ошибки в Python
Такого рода ошибка возникает при неправильном использовании структуры языка. Рассмотрим пример такой ошибки:
for i in range(0,10) print(i) Результат: SyntaxError: invalid syntax
Естественно, мы нарушили структура языка, а именно не поставили двоеточие в конце цикла for.
Логические ошибки в Python
Логические ошибка возникают, если у вас нет синтаксической ошибки. То есть интерпретатор Python, сначала анализирует ваш код на предмет наличия синтаксических ошибок. типы логических ошибок бывают разными, например:
- Если мы пытаемся открыть файл для чтения которого не существует, то словим ошибку FileNotFoundError
- Попытаемся разделить на ноль, получим ZeroDivisionError
- Попытаемся импортировать модуль, которого не существует, получим ImportError
И это только малая часть, Python не разрешит нам уничтожить мир, разделив число на ноль=). Каждый раз, когда Python видит необработанную ошибку, он пишет нам, что произошла ошибка по той или иной причине. Рассмотрим пример обработки ошибки.
100 / 0 Результат: Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> ZeroDivisionError: division by zero open("filenot.txt") Результат: Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'filenot.txt'
Исключения Python
В Python есть довольно большое количество встроенных исключений, которые вызываются при возникновении соответствующих им ошибок. Ниже представлена таблица со списками исключений.
Исключения | Причина |
AssertionError | Вызывается при сбое assert оператора. |
AttributeError | Возникает, когда не удается присвоить атрибут или ссылку. |
EOFError | Вызывается, когда input()функция достигает состояния конца файла. |
FloatingPointError | Вызывается при сбое операции с числами имеющими десятичное значение. |
GeneratorExit | при close()вызове метода генератора. |
ImportError | Вызывается, когда импортированный модуль не найден. |
IndexError | когда индекс последовательности находится вне диапазона. |
KeyError | Возникает, когда ключ не найден в словаре. |
KeyboardInterrupt | При нажатии на клавишу прерывания |
MemoryError | Вызывается, когда в операции заканчивается память. |
NameError | Вызывается, когда переменная не найдена в локальной или глобальной области видимости. |
NotImplementedError | При работе с абстрактными методами |
OSError | Когда программа вызывает связанную с ОС ошибку |
OverflowError | Возникает, когда результат арифметической операции слишком велик |
ReferenceError | Вызывается, когда слабый ссылочный прокси-сервер используется для доступа к собранному мусором референту. |
RuntimeError | Возникает, когда ошибка не попадает ни под какую другую категорию. |
StopIteration | Вызывается функцией next(), которая говорит, что больше нет элементов |
SyntaxError | Синтаксическая ошибка |
IndentationError | При нарушении отступа |
TabError | При нарушении отступов |
SystemError | Ошибка с интепретатором |
SystemExit | Функция sys.exit() |
TypeError | Ошибка с типами данных |
UnboundLocalError | Вызывается, когда делается ссылка на локальную переменную в функции или методе, но ни одно значение не было привязано к этой переменной. |
UnicodeError | Ошибка кодировки |
UnicodeEncodeError | Ошибка кодировки |
UnicodeDecodeError | Ошибка декодирования |
UnicodeTranslateError | Ошибка кодировки |
ValueError | Когда функция получает аргумент с неправильным значением |
ZeroDivisionError | При делении на ноль |
---|
В Python, мы так же сами можем создать свои исключения, поэтому внимательно читайте документацию сторонних модулей, которые вы используете. Подробнее об этом в разделе пользовательские исключения Python.
В одной из предыдущих статей, мы с вами уже затрагивали тему обработки ошибок, с помощью try…except…finally, подробнее о них, в статье обработка исключений