Исключения Django

Django вызывает несколько собственных исключений на ряду со стандартными исключениями Python.

Основные исключения Django

Определены в django.core.exceptions.

ObjectDoesNotExist и DoesNotExist

exception DoesNotExist

DoesNotExist вызывается, если объект при запросе не был найден. Django добавляет DoesNotExist как атрибут модели, при этом try/except позволяет обрабатывать эту ошибку для конкретной модели, а не любой найденный объект модели.

exception ObjectDoesNotExist

Основной класс DoesNotExist. try/except для ObjectDoesNotExist словит исключения DoesNotExist для всех моделей.

См. get() для подробной информации об исключениях ObjectDoesNotExist и DoesNotExist.

MultipleObjectsReturned

exception MultipleObjectsReturned

Исключение MultipleObjectsReturned вызывается запросом при получении нескольких объектов в случае, когда ожидался один объект. Базовая версия этого исключения предоставляется модулем django.core.exceptions; каждый класс модели содержит версию подкласса, которая может использоваться для идентификации особого объектного типа, который возвратил коллекцию объектов.

См. get() для подробной информации.

SuspiciousOperation

exception SuspiciousOperation

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

  • DisallowedHost
  • DisallowedModelAdminLookup
  • DisallowedRedirect
  • InvalidSessionKey
  • SuspiciousFileOperation
  • SuspiciousMultipartForm
  • SuspiciousSession
  • WizardViewCookieModified

Исключение SuspiciousOperation на уровне WSGI обработчика будет логгировано как ошибка и будет возвращен HttpResponseBadRequest. Подробности смотрите в разделе о логгировании.

PermissionDenied

exception PermissionDenied

Исключение PermissionDenied вызывается если пользователь не имеет права на выполнение запрошенного действия.

ViewDoesNotExist

exception ViewDoesNotExist

Исключение ViewDoesNotExist вызывается модулем django.core.urlresolvers, если запрошенное представление на найдено.

MiddlewareNotUsed

exception MiddlewareNotUsed

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

ImproperlyConfigured

exception ImproperlyConfigured

Исключение ImproperlyConfigured вызывается, если Django неправильно сконфигурировано. Например, если значение в settings.py неправильное.

FieldError

exception FieldError

Исключение FieldError вызывается, если существует проблема с полем модели. Такое может произойти по следующим причинам:

  • Поле в модели конфликтует с полем абстрактного класса, которое имеет такое же имя.

  • Бесконечный цикл, вызванный сортировкой.

  • Аргумент не может быть получен из параметров фильтра.

  • Поле не может быть определено из аргумента в параметрах запроса.

  • Объединение не разрешено для указанного поля.

  • Имя поля неверное.

  • Запрос состоит из неверного порядка аргументов.

ValidationError

exception ValidationError

Исключение ValidationError вызывается, если происходит ошибка проверки данных от формы или модели. Для подробностей о проверке данных, см. Проверка форм и полей, Проверка поля модели и the Справочник проверки.

Ошибки определения URL

Ошибки определения URL определены в django.core.urlresolvers.

Resolver404

exception Resolver404

Исключение Resolver404 вызывается в django.core.urlresolvers.resolve(), если путь переданный в resolve() не соответствует ни одному представлению. Подкласс django.http.Http404

NoReverseMatch

exception NoReverseMatch

Исключение NoReverseMatch вызывается модулем django.core.urlresolvers, если не получилось найти соответствующий URL по переданным параметрам.

Исключения базы данных

Ошибки базы данных определены в django.db.

Django оборачивает стандартные исключения базы данных таким образом, что код Django гарантирует стандартную реализацию этих классов.

exception Error
exception InterfaceError
exception DatabaseError
exception DataError
exception OperationalError
exception IntegrityError
exception InternalError
exception ProgrammingError
exception NotSupportedError

Обёртка Django для исключений базы данных ведёт себя аналогично обёртываемым исключениям. См. PEP 249, вторую версию Python Database API Specification, для подробностей.

В соответствии с PEP 3134, атрибут __cause__ содержит изначальное исключение базы данных, предоставляя доступ к дополнительной информации. (Этот атрибут доступен для Python 2 и Python 3, хотя PEP 3134 создавался для Python 3.)

Changed in Django 1.6:

Previous versions of Django only wrapped DatabaseError and IntegrityError, and did not provide __cause__.

exception models.ProtectedError

Выбрасывается для предотвращения удаления связанных объектов при использовании django.db.models.PROTECT. models.ProtectedError`является дочерним классом :exc:`IntegrityError.

Исключения Http

Ошибки HTTP определенны в django.http.

exception UnreadablePostError

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

Исключения транзакций

Ошибки транзакции определены в django.db.transaction.

exception TransactionManagementError

Исключение TransactionManagementError вызывается для всех проблем с транзакциями в базе данных.

Исключения Python

Django вызывает встроенные исключения Python когда это требуется. Обратитесь к документации Python для получения более подробной информации о exceptions.