Встроенные исключения и когда они возникают

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

Что значит иерархия? Это значит, что, если вы пытаетесь перехватить базовое исключение, то все дочерние тоже перехватятся.

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

  • BaseException - базовое исключение, от которого берут начало все остальные
    • SystemExit - исключение, порождаемое функцией sys.exit при выходе из программы
    • KeyboardInterrupt - порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C)
    • GeneratorExit - порождается при вызове метода close объекта generator
    • Exception - а вот тут уже заканчиваются полностью системные исключения (которые лучше не трогать) и начинаются обыкновенные, с которыми можно работать
      • ArithmeticError - арифметическая ошибка
        • FloatingPointError - порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто
        • OverflowError - возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях
        • ZeroDivisionError - деление на ноль
      • AssertionError - выражение в функции assert ложно
      • AttributeError - объект не имеет данного атрибута (значения или метода)
      • BufferError - операция, связанная с буфером, не может быть выполнена
      • EOFError - функция наткнулась на конец файла и не смогла прочитать то, что хотела
      • ImportError - не удалось импортирование модуля или его атрибута
        • ModuleNotFoundError - не удалось найти файл модуля, либо ошибка при поиске пути к модулю
      • LookupError - некорректный индекс или ключ
        • IndexError - индекс не входит в диапазон элементов
        • KeyError - несуществующий ключ (в словаре, множестве или другом объекте)
      • MemoryError - недостаточно памяти
      • NameError - не найдено переменной с таким именем
        • UnboundLocalError - сделана ссылка на локальную переменную в функции, но переменная не определена ранее
      • OSError - ошибка, связанная с системой
        • BlockingIOError - операция блокирует объект (например, сокет), настроенный на неблокирующую работу
        • ChildProcessError - неудача при операции с дочерним процессом
        • ConnectionError - базовый класс для исключений, связанных с подключениями
          • BrokenPipeError - попытка записи в pipe, когда другой конец был закрыт, или попытка записи в сокет, который был закрыт для записи
          • ConnectionAbortedError - попытка соединения прервана пиром
          • ConnectionRefusedError - попытка соединения отклонена пиром
          • ConnectionResetError - попытка соединения перезапущена пиром
        • FileExistsError - попытка создания файла или директории, которая уже существует
        • FileNotFoundError - файл или директория не существует
        • InterruptedError - системный вызов прерван входящим сигналом
        • IsADirectoryError - ожидался файл, но это директория
        • NotADirectoryError - ожидалась директория, но это файл
        • PermissionError - не хватает прав доступа
        • ProcessLookupError - указанного процесса не существует
        • TimeoutError - закончилось время ожидания
      • ReferenceError - попытка доступа к атрибуту со слабой ссылкой
      • RuntimeError - исключение не попадает ни под одну из других категорий
        • RecursionError - достигнут лимит глубины рекурсии
      • NotImplementedError - абстрактные методы класса требуют переопределения в дочерних классах
      • StopIteration - порождается встроенной функцией next, если в итераторе больше нет элементов
      • StopAsyncIteration - порождается методом __anext__(), если в асинхронном итераторе больше нет элементов
      • SyntaxError - синтаксическая ошибка
        • IndentationError - неправильные отступы
          • TabError - смешивание в отступах табуляции и пробелов
      • SystemError - внутренняя ошибка
      • TypeError - операция применена к объекту несоответствующего типа
      • ValueError - функция получает аргумент правильного типа, но некорректного значения
      • UnicodeError - ошибка, связанная с кодированием / декодированием unicode в строках
        • UnicodeEncodeError - исключение, связанное с кодированием unicode
        • UnicodeDecodeError - исключение, связанное с декодированием unicode
        • UnicodeTranslateError - исключение, связанное с переводом unicode