Исключения

В процессе выполнения Python-программа выдает информационные и диагностические сообщения с помощью следующих исключений:

Warning

Исключение, вызываемое для важных предупреждений, таких, как усечение данных в процессе вставки и т.д. Этот класс является производным от класса Python StandardError (определенного в модуле exceptions).

Error

Исключение, являющееся базовым классом всех других исключений, связанных с ошибками. Его можно использовать для перехвата всех исключений с помощью единственного утверждения 'except'. Предупреждения не рассматриваются как ошибки и поэтому не должны использовать этот класс в качестве базового. Этот класс является производным от класса Python StandardError (определенного в модуле exceptions).

InterfaceError

Исключение порождается ошибками в Python-интерфейсе. Является производным от класса Error.

DatabaseError

Исключение порождается ошибками обработки данных в БД. Оно является подклассом класса Error.

DataError

Исключение порождается при обработке некорректных данных в БД (деление на ноль, выход величины за пределы допустимых значений и т.д.). Является производным от класса DatabaseError.

OperationalError

Порождение исключения вызывается внешними причинами (неожиданный обрыв соединения, не найдено имя источника данных, невозможно обработать транзакцию, ошибка распределения памяти в процессе обработки и т.д.). Является производным от класса DatabaseError.

IntegrityError

Исключение порождается при нарушении ссылочной целостности БД (например, попытка ссылки на несуществующую внешнюю запись). Является производным от класса DatabaseError.

InternalError

Исключение порождается внутренними ошибками СУБД (например, курсор больше не является допустимым, транзакция не синхронизирована и т.д.). Является производным от класса DatabaseError.

ProgrammingError

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

NotSupportedError

Исключение порождается в случае использования вызова API. Является производным от класса DatabaseError. Схема наследования исключений показана на рисунке.

StandardError
|__Warning
|__Error
    |__InterfaceError
    |__DatabaseError
         |__DataError
         |__OperationalError
         |__IntegrityError
         |__InternalError
         |__ProgrammingError
         |__NotSupportedError

Рисунок. Схема наследования исключений

Примечание

Все исключения, возникающие в Python-драйвере, содержат коды завершения и их текстовую расшифровку. Для получения дополнительных сведений об исключении можно воспользоваться следующими расширенными свойствами, не входящими в спецификацию DB API 2.0:

-code код завершения СУБД ЛИНТЕР
-message текстовая расшифровка кода завершения
-linCode синоним свойства code
-apiCode код ошибки прикладного интерфейса
-sysCode код системной ошибки
-object объект, вызвавший исключение

Пример

try:
  con = LinPy.connect('SYSTEM', 'MANAGER8', '', LinPy.M_EXCLUSIVE)
  cur = LinPy.cursor(con)
…

except LinPy.DatabaseError as e:
  error, = e.args
  print(error.сode)
  print(error.apiCode)
  print(error.linCode)
  print(error.sysCode)
  print(error.message)