Это немного экстремально, но для целей отладки вы можете включить настройку DEBUG_PROPAGATE_EXCEPTIONS
. Это позволит вам настроить свою собственную обработку ошибок. Самый простой способ настроить обработку ошибок - переопределить sys.excepthook . Это прекратит работу вашего приложения, но оно будет работать. Могут быть вещи, которые вы можете сделать, чтобы это не убивало ваше приложение, но это будет зависеть от того, для какой платформы вы это развертываете. В любом случае, никогда не используйте это в производстве!
Для производства вам, скорее всего, потребуется обширная обработка ошибок. Одна из техник, которую я использовал, выглядит примерно так:
>>> def log_error(func):
... def _call_func(*args, **argd):
... try:
... func(*args, **argd)
... except:
... print "error" #substitute your own error handling
... return _call_func
...
>>> @log_error
... def foo(a):
... raise AttributeError
...
>>> foo(1)
error
Если вы используете log_error в качестве декоратора для вашего представления, оно автоматически обработает все ошибки, которые произошли в нем.
Процесс _
Функция исключения вызывается для некоторых исключений (например, assert (False) в views.py), но процесс _
Исключение не вызывается для других ошибок, таких как ImportErrors (например: импорт thisclassdoesnotexist в urs. ру). Я новичок в Django / Python. Это из-за некоторого различия между ошибками во время выполнения и во время компиляции?
В Python все ошибки являются ошибками во время выполнения. Причина, по которой это вызывает проблемы, заключается в том, что эти ошибки возникают сразу же, когда модуль импортируется до того, как ваш вид когда-либо вызывается. Первый метод, который я опубликовал, будет отлавливать подобные ошибки для отладки. Возможно, вам удастся что-то выяснить для производства, но я бы сказал, что у вас проблемы хуже, если вы получаете ImportErrors в рабочем приложении (а динамический импорт не выполняется).
Такой инструмент, как pylint , может помочь вам устранить подобные проблемы.