Сообщить об ошибке.

Исключения наследуемые от Exception

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

Следующие исключения являются исключениями, которые обычно возникают во время исполнения программы.

Содержание:


StopIteration:

Исключение StopIteration вызывается встроенной функцией next() и методом итератора __next__() для сигнализации того, что итератор больше не производит никаких элементов.

Объект исключения имеет единственный атрибут value, который задается в качестве аргумента при создании исключения и по умолчанию равен None.

Когда функция генератора или сопрограммы возвращается, создается новый экземпляр StopIteration, и значение, возвращаемое функцией, используется в качестве параметра value для конструктора исключения.

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

StopAsyncIteration:

Исключение StopAsyncIteration вызывается методом __next__() объекта асинхронного итератора, чтобы остановить итерацию.

ArithmeticError:

Описание исключения ArithmeticError и его подклассов смотрите в разделе "Арифметические ошибки"

AssertionError:

Исключение AssertionError вызывается когда оператор assert терпит неудачу.

AttributeError:

Например: AttributeError: 'module' object has no attribute 'attribute_name' или AttributeError: 'str' object has no attribute 'items'

Исключение AttributeError вызывается при сбое ссылки на атрибут или присвоения. Если объект не поддерживает ссылки на атрибуты или назначения атрибутов вообще, вызывается TypeError.

Можно получить этот тип ошибки при попытке доступа к атрибуту или методу, который не существует для модуля или объекта.

Чтобы это исправить, просмотрите код и убедитесь, что вызываемый атрибут или метод корректен и доступен.

BufferError:

Исключение BufferError вызывается когда операция, связанная с буфером, не может быть выполнена.

EOFError:

Исключение EOFError вызывается когда функция input() попадает в состояние конца файла без чтения каких-либо данных. Когда методы io.IOBase.read() and io.IOBase.readline() возвращают пустую строку при попадании в EOF.

ImportError:

Например: ImportError: No module named 'module_name'

Исключение ImportError вызывается когда оператор import имеет проблемы при попытке загрузить модуль. Также ImportError поднимается, когда конструкция from ... import ... имеет имя, которое не может быть найдено.

Также можно получить эту ошибку, если попытаться импортировать модуль, который не установлен или не доступен. Чтобы этого избежать, установите необходимый модуль с помощью менеджера пакетов (pip) или проверьте имя модуля на наличие опечаток.

  • ModuleNotFoundError:

    Исключение ModuleNotFoundError подкласс ImportError, который вызывается оператором import, когда модуль не может быть найден. Он также вызывается, когда в sys.modules имеет значение None.

LookupError:

Исключение LookupError - базовый класс для исключений, возникающих при недопустимости ключа или индекса, используемого в сопоставлении или последовательности: IndexError, KeyError. Исключение LookupError может быть вызван непосредственно codecs.lookup().

  • IndexError:

    Например: IndexError: list index out of range или ``

    Исключение IndexError вызывается когда индекс последовательности находится вне диапазона. Если индекс не является целым числом, поднимается исключение TypeError.

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

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

  • KeyError:

    Исключение KeyError вызывается когда ключ сопоставления/словаря не найден в наборе существующих ключей.

MemoryError:

Исключение MemoryError вызывается, когда операции не хватает памяти, но ситуация все еще может быть спасена путем удаления некоторых объектов. Значение представляет собой строку, указывающую какой внутренней операции не хватило памяти. Обратите внимание, что из-за базовой архитектуры управления памятью интерпретатор не всегда может полностью восстановиться в этой ситуации. Тем не менее, возникает исключение, чтобы можно было напечатать трассировку стека.

NameError:

Например: NameError: name 'variable' is not defined

Исключение NameError вызывается, когда не найдено имя переменной в локальном или глобальном пространстве имен. Эти типы ошибок могут возникать в результате попытки использовать переменную или функцию, которые не были определены.

Обязательно проверьте, нет ли опечаток в именах переменных или функций, и убедитесь, что они определены перед использованием.

  • UnboundLocalError:

    Исключение UnboundLocalError вызывается, когда ссылка сделана на локальную переменную в функции или методе, но никакое значение не было привязано к этой переменной. Это подкласс NameError.

OSError:

Описание исключения OSError и его подклассов смотрите в разделе "Ошибки операционной системы"

ReferenceError:

Исключение ReferenceError вызывается, когда слабый эталонный прокси-сервер, созданный функцией weakref.proxy() используется для доступа к атрибуту референта после сбора его мусора.

RuntimeError:

Исключение RuntimeError вызывается при обнаружении ошибки, которая не попадает ни в одну из других категорий. Связанное значение является строкой, указывающей, что именно пошло не так.

  • PythonFinalizationError:

    Исключение PythonFinalizationError является производным от RuntimeError. Оно возникает, когда операция блокируется во время завершения работы интерпретатора, также известного как финализация Python (interpreter shutdown).

    Примеры операций, которые могут быть заблокированы с помощью PythonFinalizationError во время финализации Python:

    • Создание нового потока Python.
    • os.fork().

    Следующие функции теперь вызывают PythonFinalizationError вместо RuntimeError:

    • _thread.start_new_thread().
    • subprocess.Popen().
    • os.fork().
    • os.forkpty().

    Дополнительно смотрите функцию sys.is_finalizing(), которая возвращает True, если интерпретатор Python завершает работу, в противном случае False.

  • NotImplementedError:

    Исключение NotImplementedError получено из RuntimeError. В определяемых пользователем базовых классах абстрактные методы должны вызывать это исключение, когда им требуется, чтобы производные классы переопределяли метод, или когда класс разрабатывается, чтобы указать, что реальная реализация все еще должна быть добавлена.

    Заметки:

    1. NotImplementedError не следует использовать для указания того, что оператор или метод вообще не предполагается поддерживать - в этом случае либо оставьте оператор/метод неопределенным, либо, установите его в None.
    2. NotImplementedError и NotImplemented не являются взаимозаменяемыми, даже если они имеют схожие имена и цели. Смотрите подробности NotImplemented о том, когда его использовать.
  • RecursionError:

    Исключение RecursionError получено из RuntimeError. Исключение RecursionError вызывается, когда интерпретатор обнаруживает, что максимальная глубина рекурсии sys.getrecursionlimit() превышена.

SyntaxError(message, details):

Например: SyntaxError: invalid syntax

Исключение SyntaxError вызывается, когда синтаксический анализатор обнаруживает синтаксическую ошибку - это наиболее распространенный вид ошибки, которые вы получаете, пока изучаете Python. Ошибка данного типа может произойти если отсутствует или имеется лишняя скобка, неуместное двоеточие или какая-либо другая проблема, связанная с синтаксисом. Также может произойти в инструкции import, при вызове встроенной функции exec() или eval(), или при чтении первоначального сценария или стандартный ввода, также в интерактивном режиме.

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

Функция str() возвращает только сообщение об ошибке (аргумент message). Аргумент details - это кортеж, элементы которого также доступны как отдельные атрибуты.

  • filename: Имя файла, в котором произошла синтаксическая ошибка.
  • lineno: Номер строки в файле, в котором произошла ошибка. Это индексация 1: первая строка в файле имеет номер строки, равный 1.
  • offset: Столбец в строке, где произошла ошибка. Это индексация 1: первый символ в строке имеет смещение 1.
  • text: Текст исходного кода, связанный с ошибкой.
  • end_lineno: Номер строки в файле, на которой произошедшая ошибка заканчивается. Индексирование начинается с 1: первая строка в файле имеет номер строки, равный 1.
  • end_offset: Столбец в конце строки, где произошедшая ошибка заканчивается. Индексирование начинается с 1: первый символ в строке имеет смещение 1.

Для ошибок в полях f-строки перед сообщением ставится префикс "f-string:", а смещения представляют собой смещения в тексте, составленном из выражения замены. Например, компиляция f'Bad {a b} field' приводит к следующему атрибуту args: ('f-string: …', ('', 1, 2, '(a b)n', 1, 5)).

Изменено в версии 3.10: Добавлены атрибуты end_lineno и end_offset.

  • IndentationError:

    Например: IndentationError: unexpected indent

    Исключение IndentationError служит базовым классом для синтаксических ошибок, связанных с неправильным отступом. Это подкласс SyntaxError.

    Python использует отступы для определения блоков кода. Эта ошибка возникает, когда отступ является непоследовательным или неправильным.

    Чтобы избежать этих ошибок, обеспечьте правильный и последовательный ввод отступов с использованием табуляции, как того требует язык программирования.

  • TabError:

    Исключение TabError вызывается, когда отступ содержит несоответствующее использование символов табуляции и пробелов. Это подкласс IndentationError.

SystemError:

Исключение SystemError вызывается, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не выглядит настолько серьезной, чтобы заставить его отказаться от всякой надежды. Ассоциированное значение - это строка, указывающая, что пошло не так (в терминах низкого уровня).

TypeError:

Это распространенное исключение в Python, например: TypeError: getsockaddrarg: AF_INET address must be tuple, not str

Исключение TypeError вызывается, когда операция или функция применяется к объекту неподходящего типа. Связанное значение представляет собой строку, содержащую сведения о несоответствии типов.

Исключение TypeError может быть вызвано пользовательским кодом, чтобы указать, что попытка выполнения операции над объектом не поддерживается и не должна поддерживаться. Если объект предназначен для поддержки данной операции, но еще не предоставил реализацию, то вызывайте исключение NotImplementedError.

Передача аргументов неправильного типа, например передача списка, когда ожидается целое число, должна привести к TypeError, но передача аргументов с неправильным значением, например число вне ожидаемых границ, должна привести к ValueError.

Примеры исключений TypeError:

  • TypeError: unsupported operand type(s) for +: 'type1' and 'type2'. Эта ошибка возникает при попытке выполнить операцию над двумя объектами несовместимых типов. Например, попытка сложить строку и целое число или умножить список на строку.
  • TypeError: function_name() takes X positional arguments but Y were given. Эта ошибка возникает при вызове функции с неверным количеством аргументов. Это указывает на то, что функция ожидает определенное количество аргументов, но предоставляется другое число.
  • TypeError: 'int' object is not callable. Эта ошибка возникает, когда вы пытаетесь вызвать объект, как если бы это была функция, но он не может быть вызван. Например, попытка вызвать целое число.
  • TypeError: 'generator' object is not subscriptable. Возникает, например, если попытаться обратиться к элементу генератора по его индексу, как-будто это список
  • TypeError: 'module' object is not callable. Чаще всего возникает если функция или переменная названы так же как и импортированный модуль или какая-то зарезервированная функция Python
  • TypeError: 'str' object is not callable. Возможно, создан класс у которого есть атрибут типа str , и при этом метод с таким же названием как и у атрибута. При попытке вызова метода Python понимает, что он существует, но получает указатель не на метод, а на str.
  • TypeError: item 2 in _argtypes_ passes a union by value, which is unsupportedTypeError: item 2 in _argtypes_ passes a union by value, which is unsupported. Эта ошибка говорит о том, что код не проходит проверку. Скорее код запускается на версии Python 3.8.1. Перед её выходом в Python добавили дополнительный тест на тип, от которого затем отказались из-за того, что большое количество сторонних библиотек были с этим тестом несовместимы. Самое простое решение этой проблемы - установка другой версии Python.

ValueError:

Исключение ValueError вызывается, когда операция или функция получает аргумент, который имеет правильный тип, но недопустимое значение, и ситуация не описывается более точным исключением, таким как IndexError.

Примеры исключений ValueError:

  • ValueError: invalid literal for int() with base X: 'non-numeric'. Происходит при попытке преобразовать строку в целое число с помощью int(), но строка не является допустимым представлением целого числа в указанной системе счисления (X). Например, попытка преобразовать нечисловую строку или строку с недопустимым форматом (например, содержащую буквы) в целое число.
  • ValueError: could not convert string to float: 'non-numeric'. Происходит при попытке преобразовать строку в число с плавающей запятой с помощью float(), но строка не является допустимым представлением числа. Как и в первом случае, он часто включает нечисловые символы или неверный формат.
  • ValueError: invalid literal for int() with base 10: 'non-numeric'. Как и в первом случае, эта ошибка возникает при попытке преобразовать строку в целое число с помощью int(), но строка не является допустимым числовым представлением в системе счисления 10. Это более общая форма ошибки первого типа, где основание явно установлено значение 10.
  • ValueError: unhashable type: 'mutable_type'. Эта ошибка возникает при попытке использовать изменяемый тип (например, список, словарь) в качестве ключа в словаре или элемента в наборе. Словари и наборы требуют, чтобы ключи и элементы имели хешируемый (неизменяемый) тип. Чтобы решить эту проблему, преобразуйте изменяемый тип в неизменяемый или рассмотрите другую структуру данных, поддерживающую изменяемые элементы.

UnicodeError:

Описание исключения UnicodeError и его подклассов смотрите в разделе "Ошибки Unicode"

EnvironmentError:

Доступно только в Windows.

IOError:

Доступно только в Windows.

WindowsError:

Доступно только в Windows.