Назад к вопросам
Junior
69
questionbank

Какие классы исключений существуют в Python?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Python существует иерархия классов исключений, где большинство исключений являются производными от класса Exception. Некоторые ключевые классы включают:

  • BaseException: Базовый класс для всех исключений. Не рекомендуется обрабатывать напрямую, за исключением очень редких случаев.
  • Exception: Базовый класс для всех несистемных исключений, которые обычно перехватывают в программах.
  • ArithmeticError: Базовый класс для исключений, связанных с арифметическими операциями. Включает:
    • FloatingPointError: Исключение при сбое операции с плавающей точкой.
    • OverflowError: Исключение при превышении допустимого диапазона числа.
    • ZeroDivisionError: Исключение при делении на ноль.
  • AssertionError: Исключение при сбое оператора assert.
  • AttributeError: Исключение при попытке получить атрибут или вызвать метод, который не существует.
    # Пример AttributeError
    class MyClass:
        pass
    
    obj = MyClass()
    # print(obj.non_existent_attribute) # Вызовет AttributeError
    
  • EOFError: Исключение при достижении конца файла без чтения данных.
  • ImportError: Базовый класс для исключений, связанных с импортом модулей. Включает:
    • ModuleNotFoundError: Исключение при невозможности найти модуль.
  • IndexError: Исключение при выходе индекса за пределы последовательности.
    # Пример IndexError
    my_list = [1, 2, 3]
    # print(my_list[3]) # Вызовет IndexError
    
  • KeyError: Исключение при попытке доступа к несуществующему ключу в словаре.
    # Пример KeyError
    my_dict = {"a": 1, "b": 2}
    # print(my_dict["c"]) # Вызовет KeyError
    
  • KeyboardInterrupt: Исключение при прерывании программы пользователем (обычно Ctrl+C).
  • MemoryError: Исключение при исчерпании доступной памяти.
  • NameError: Исключение при попытке использования неопределенной переменной.
    # Пример NameError
    # print(undefined_variable) # Вызовет NameError
    
  • OSError: Базовый класс для исключений, связанных с операционной системой. Включает:
    • FileNotFoundError: Исключение при попытке доступа к несуществующему файлу или директории.
    • IsADirectoryError: Исключение при попытке выполнения файловой операции над директорией.
    • NotADirectoryError: Исключение при попытке выполнения файловой операции над не-директорией.
    • PermissionError: Исключение при отсутствии прав доступа.
  • RuntimeError: Исключение, возникающее, когда класс не подпадает ни под одну из других категорий исключений.
  • SyntaxError: Исключение при обнаружении синтаксической ошибки в коде.
  • SystemError: Исключение при обнаружении внутренней ошибки интерпретатора.
  • TypeError: Исключение при применении операции или функции к объекту неподходящего типа.
    # Пример TypeError
    # print(1 + "2") # Вызовет TypeError
    
  • ValueError: Исключение при передаче функции аргумента правильного типа, но неподходящего значения.
    # Пример ValueError
    # int("abc") # Вызовет ValueError
    
  • ZeroDivisionError: (уже упоминался в ArithmeticError)

Некоторые исключения являются подклассами других, формируя иерархию. Например, ModuleNotFoundError является подклассом ImportError.

Часть иерархии:

BaseException
 ├── Exception
 │   ├── ArithmeticError
 │   │   ├── FloatingPointError
 │   │   ├── OverflowError
 │   │   └── ZeroDivisionError
 │   ├── AssertionError
 │   ├── AttributeError
 │   ├── EOFError
 │   ├── ImportError
 │   │   └── ModuleNotFoundError
 │   ├── IndexError
 │   ├── KeyError
 │   ├── MemoryError
 │   ├── NameError
 │   ├── OSError
 │   │   ├── FileNotFoundError
 │   │   ├── IsADirectoryError
 │   │   ├── NotADirectoryError
 │   │   └── PermissionError
 │   ├── RuntimeError
 │   ├── SyntaxError
 │   ├── TypeError
 │   └── ValueError
 └── KeyboardInterrupt

Это не полный список, но включает наиболее часто встречающиеся исключения.

При обработке исключений рекомендуется перехватывать более конкретные исключения перед более общими, чтобы обеспечить более точную обработку ошибок.