Обработка исключений с помощью операторов try / except / finally, типы исключений в Python 🤔
Python

Обработка исключений с помощью операторов try / except / finally, типы исключений в Python 🤔

Теги не заданы
Razilator

Операторы try и except в Python используются для обработки исключений, которые могут возникнуть во время выполнения программы. Эти операторы позволяют программисту предугадать исключительные ситуации, чтобы избежать сбоев в работе программы.

Оператор try определяет блок кода, в котором может возникнуть исключение. Если во время выполнения блока кода происходит исключение, то выполнение программы переходит в блок except, где можно обработать исключение и выполнить дополнительный код. Если в блоке try не произошло исключения, то блок except будет пропущен.

Пример использования операторов try и except:

main.py
try:
  num = int(input("Введите число: "))
  result = 100 / num
except ZeroDivisionError:
  print("Деление на ноль невозможно!")
else:
  print("Результат: ", result)
finally:
  print("Выполнение программы завершено.")

PEP 8 рекомендует, по возможности, указывать конкретный тип исключения после ключевого слова except (чтобы перехватывать и обрабатывать конкретные исключения)

В этом примере пользователь вводит число, которое затем используется для деления на 100.

Если пользователь вводит ноль, то возникает исключение ZeroDivisionError, которое обрабатывается блоком except.

Если пользователь вводит ненулевое число, то выполнение программы переходит в блок else, где выводится результат деления.

Наконец, выполнение программы завершается блоком finally, который всегда выполняется независимо от того, было ли исключение или нет.

Как пропустить ошибку

Иногда ошибку обрабатывать не нужно. В этом случае ее можно пропустить с помощью pass:

main.py
try:
   a = 6 / 0
except ZeroDivisionError:
   pass

Raise — самостоятельный вызов исключений

Исключения можно генерировать самостоятельно — для этого нужно запустить оператор raise.

main.py
min = 300
if min > 10:
    raise Exception('min must be less than 10')

Ошибка:

Терминал
>>> Traceback (most recent call last):
>>>  File "C:\Users\Razilator\Desktop\Courses\nth-coding\main.py", line 3, in <module>
>>>    raise Exception('min must be less than 10')
>>> Exception: min must be less than 10

Типы исключений в Python

20 типов встроенных исключений в Python Все исключения в Python наследуются от базового BaseException:

SystemExit — системное исключение, вызываемое функцией sys.exit() во время выхода из приложения; KeyboardInterrupt — возникает при завершении программы пользователем (чаще всего при нажатии клавиш Ctrl+C); GeneratorExit — вызывается методом close объекта generator; Exception — исключения, которые можно и нужно обрабатывать (предыдущие были системными и их трогать не рекомендуется).

От Exception наследуются:

  • StopIteration — вызывается функцией next в том случае если в итераторе закончились элементы;
  • ArithmeticError — ошибки, возникающие при вычислении, бывают следующие типы: ** FloatingPointError — ошибки при выполнении вычислений с плавающей точкой (встречаются редко); ** OverflowError — результат вычислений большой для текущего представления (не появляется при операциях с целыми числами, но может появиться в некоторых других случаях); ** ZeroDivisionError — возникает при попытке деления на ноль.
  • AssertionError — выражение, используемое в функции assert неверно;
  • AttributeError — у объекта отсутствует нужный атрибут;
  • BufferError — операция, для выполнения которой требуется буфер, не выполнена;
  • EOFError — ошибка чтения из файла;
  • ImportError — ошибка импортирования модуля;
  • LookupError — неверный индекс, делится на два типа:
  • IndexError — индекс выходит за пределы диапазона элементов;
  • KeyError — индекс отсутствует (для словарей, множеств и подобных объектов); ** MemoryError — память переполнена; ** NameError — отсутствует переменная с данным именем;
  • OSError — исключения, генерируемые операционной системой: ** ChildProcessError — ошибки, связанные с выполнением дочернего процесса; ** ConnectionError — исключения связанные с подключениями (BrokenPipeError, ConnectionResetError, ConnectionRefusedError, ConnectionAbortedError); ** FileExistsError — возникает при попытке создания уже существующего файла или директории; ** FileNotFoundError — генерируется при попытке обращения к несуществующему файлу; ** InterruptedError — возникает в том случае если системный вызов был прерван внешним сигналом; ** IsADirectoryError — программа обращается к файлу, а это директория; ** NotADirectoryError — приложение обращается к директории, а это файл; ** PermissionError — прав доступа недостаточно для выполнения операции; ** ProcessLookupError — процесс, к которому обращается приложение не запущен или отсутствует; ** TimeoutError — время ожидания истекло;
  • ReferenceError — попытка доступа к объекту с помощью слабой ссылки, когда объект не существует;
  • RuntimeError — генерируется в случае, когда исключение не может быть классифицировано или не подпадает под любую другую категорию;
  • NotImplementedError — абстрактные методы класса нуждаются в переопределении;
  • SyntaxError — ошибка синтаксиса;
  • SystemError — сигнализирует о внутренне ошибке;
  • TypeError — операция не может быть выполнена с переменной этого типа;
  • ValueError — возникает когда в функцию передается объект правильного типа, но имеющий некорректное значение;
  • UnicodeError — исключение связанное с кодирование текста в unicode, бывает трех видов: ** UnicodeEncodeError — ошибка кодирования; ** UnicodeDecodeError — ошибка декодирования; ** UnicodeTranslateError — ошибка перевода unicode.
  • Warning — предупреждение, некритическая ошибка.
;