Цель данной статьи
В данной статье мы расскажем о синтаксических ошибках в языке Python. Также мы изучим что такое исключения в Python, сообщения об ошибках и встроенные классы исключений в Python.
Мы постараемся рассмотреть большинство возможных ошибок и исключений. Изучив их, вы сможете быстро и гладко писать код на Python.
Итак, начнем изучение ошибок и исключений.
Синтаксические ошибки в Python
Если вы совершаете синтаксическую ошибку в Python, то ваш код просто не будет работать. Например, следующий код вызовет синтаксическую ошибку:
if 2>1 print("2")
Она будет иметь следующий вид:
SyntaxError: invalid syntax
Данный код не работает, потому что в нем отсутствует двоеточие после условия if 2>1
.
Синтаксическая ошибка, также называемая ошибкой синтаксического анализа, отображается следующим образом: SyntaxError: invalid syntax
.
Что такое исключения в Python
Весьма удобно распознавать проблемы в коде Python перед началом его использования. Но так бывает не всегда. Иногда проблемы возникают при запуске кода; иногда, в середине его работы.
Исключение в Python — это ошибка, обнаруженная во время выполнения кода. Это может быть фатально для программы, а может быть и нет. Возьмем самый распространенный пример:
a,b=1,0 print(a/b)
Результат:
Traceback (most recent call last): File “<pyshell#208>”, line 1, in <module> print(a/b) ZeroDivisionError: division by zero
В наших руководствах по Python вы наверно уже замечали такие слова, как TypeError, NameError и так далее. Настало время узнать, что это означает.
Сообщения об ошибках и исключениях в Python
Когда возникают ошибки и исключения в Python, интерпретатор выводит на экран четырехстрочное сообщение, в том случае конечно если это исключение не обработано.
Первая строчка сообщает нам, что это трассировка. Это означает, что интерпретатор отслеживает исключение Python до точки ее возникновения.
Во второй строчке сообщения об ошибке дан номер строки кода, в которой эта ошибка произошла. В нашем случае это строка 1. #208 означает, что это 208-ая команда, которую мы выполняем в интерпретаторе с момента его открытия.
Третья строка показывает нам саму строку (инструкцию), которая вызвала исключение Python.
И наконец, четвертая строка сообщает нам тип исключения Python, а также краткое описание того, что произошло.
Встроенные исключения Python
Теперь, когда мы знаем, что такое исключения, поговорим о встроенных исключениях в Python. Читая о них, постарайтесь вспомнить, сталкивались ли вы когда-нибудь с такими исключениями раньше.
Исключение AssertionError
Это исключение возникает, когда оператор assert возвращает значение False.
Правильно работающий оператор assert выглядит следующим образом:
assert(1==1)
Но если мы напишем следующий код, то получим AssertionError:
assert(1==2)
Результат:
Traceback (most recent call last): File “<pyshell#213>”, line 1, in <module> assert(1==2) AssertionError
Позже мы еще вернемся к оператору assert
.
Исключение AttributeError
Данное исключение возникает когда происходит ошибка присваивания атрибута или ссылки на него. Рассмотрим для примера класс fruit
.
class fruit: pass fruit.size
Результат:
Traceback (most recent call last): File “<pyshell#223>”, line 1, in <module> fruit.size AttributeError: type object ‘fruit’ has no attribute ‘size’
Как можно заметить, атрибута size
не существует и поэтому было вызвано исключение AttributeError.
Исключение EOFError
Это исключение Python возникает, когда функция input()
достигает условия конца файла, то есть считывать просто больше нечего.
Исключение FloatingPointError
Данное исключение возникает при ошибках в операциях с числами типа float
(с плавающей запятой).
Исключение GeneratorExit
Данное исключение может возникать при работе метода close()
.
Исключение ImportError
Данное исключение возникает в случае, если импортируемый модуль не был найден.
from math import ppi
Результат:
Traceback (most recent call last): File “<pyshell#234>”, line 1, in <module> from math import ppi ImportError: cannot import name ‘ppi’
Исключение IndexError
Данное исключение возникает в случае если вы пытаетесь обратиться к несуществующему индексу некой последовательности (список, кортеж и т.д.).
list=[1,2,3] list[3]
Результат:
Traceback (most recent call last): File “<pyshell#236>”, line 1, in <module> list[3] IndexError: list index out of range
Исключение KeyError
Данное исключение возникает в случае если ключ в словаре не найден.
dict1={1:1,2:2} dict1[3]
Результат:
Traceback (most recent call last): File “<pyshell#239>”, line 1, in <module> dict1[3] KeyError: 3
Исключение KeyboardInterrupt
Данное исключение возникает когда пользователь в процессе выполнения программы нажимает комбинацию клавиш Ctrl + C.
>>> while True: print("Hello") Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
После нажатия Ctrl + C:
Traceback (most recent call last): File “<pyshell#244>”, line 1, in <module> while True: print(“Hello”) KeyboardInterrupt
Исключение MemoryError
Данное исключение возникает, когда заканчивается отведенная программе память.
Исключение ModuleNotFoundError
Данной исключение возникает при импорте несуществующего модуля.
import maths
Результат:
Traceback (most recent call last): File “<pyshell#233>”, line 1, in <module> import maths ModuleNotFoundError: No module named ‘maths’
Исключение NameError
Данное исключение возникает в случае, если имя переменной не может быть найдено в доступных областях видимости.
eggs
Результат:
Traceback (most recent call last): File “<pyshell#245>”, line 1, in <module> eggs NameError: name ‘eggs’ is not defined
Исключение NotImplementedError
Данное исключение может быть вызвано абстрактными методами Python.
Исключение OSError
Данное исключение возникает в случае если какая-либо операция вызывает ошибку операционной системы.
Исключение OverflowError
Данное исключение возникает в случае если результат выполнения арифметической операции слишком велик для его представления.
Исключение ReferenceError
Данное исключение возникает при попытке доступа к атрибуту прокси-объекта слабой ссылки, в случае, когда основной объект, для которого создавался прокси, уже недоступен (был удалён сборщиком мусора).
Исключение RuntimeError
Когда ошибка не подпадает ни под какую конкретную категорию, мы называем ее RuntimeError.
Исключение StopIteration
Функция next()
вызывает исключение StopIteration, чтобы указать, что итератор больше не может возвращать элементы.
def countdown(): n=4 while(n>0): yield n n-=1 c=countdown() next(c) # Результат: # 4 next(c) # Результат: # 3 next(c) # Результат: # 2 next(c) # Результат: # 1 next(c)
Результат:
Traceback (most recent call last): File “<pyshell#23>”, line 1, in <module> next(c) StopIteration
Исключение IndentationError
Данное исключение возникает при неправильном отступе.
Исключение TabError
Если отступы несовместимы при одновременном использовании табуляций и пробелов, возникает исключение TabError. Таким образом, для отступов лучше использовать только пробелы.
Исключение SystemError
Данное исключение возникает если интерпретатор обнаруживает внутреннюю ошибку.
Исключение SystemExit
Данное исключение вызывается функцией sys.exit()
.
Исключение TypeError
Исключение TypeError возникает при попытке применить функцию или операцию к объекту неправильного типа.
'10'+10
Результат:
Traceback (most recent call last): File “<pyshell#38>”, line 1, in <module> ’10’+10 TypeError: must be str, not int
Исключение UnboundLocalError
Исключение UnboundLocalError возникает при попытке получить доступ к локальной переменной без предварительного присвоения ей значения.
def sayhi(): m+=1 print(m) sayhi()
Результат:
Traceback (most recent call last): File “<pyshell#53>”, line 1, in <module> sayhi() File “<pyshell#52>”, line 2, in sayhi m+=1 UnboundLocalError: local variable ‘m’ referenced before assignment
Исключение UnicodeError
Данное исключение возникает при ошибке кодирования/декодирования, связанной с Unicode.
Исключение UnicodeEncodeError
Это ошибка Unicode при кодировании (преобразовании строки в последовательность байтов).
Исключение UnicodeDecodeError
Это ошибка Unicode при декодировании ( преобразовании последовательности байтов в строку).
Исключение UnicodeTranslateError
Данное исключение возникает при ошибке преобразование строки в другую кодировку.
Исключение ValueError
Исключение ValueError возникает если значение величины не соответствует ее типу.
int(input()) 3.5
Результат:
Traceback (most recent call last): File “<pyshell#55>”, line 1, in <module> int(input()) ValueError: invalid literal for int() with base 10: ‘3.5’
Исключение ZeroDivisionError
Наконец мы дошли до исключения ZeroDivisionError, с которым столкнулись в самом начале статьи. Оно возникает в случае, если знаменатель при делении равен 0
. При этом нарушения синтаксиса не происходит.
print(1 / 0)
Результат:
Traceback (most recent call last): File “<pyshell#56>”, line 1, in <module> print(1/0) ZeroDivisionError: division by zero
Итак, это пока все, что мы хотели вам рассказать об ошибках и исключениях в Python. Надеемся, что вам наша статья понравилась.
Заключение
В данной статье вы узнали об ошибках и исключениях в Python. Также мы кратко рассмотрели некоторые встроенные исключения Python. Если у вас остались какие-либо вопросы, не стесняйтесь, спрашивайте в комментариях.
Перевод статьи What is Python Exception – Python Error & In-built Exception in Python.