Встроенные ошибки и исключения в Python

Цель данной статьи

В данной статье мы расскажем о синтаксических ошибках в языке 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.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll to Top