Я знаю, что режим отладки устанавливает для PROPAGATE_EXCEPTIONS значение True. И производственный режим устанавливает для PROPAGATE_EXCEPTIONS значение False.
Я также знаю, что в производственном режиме значение PROPAGATE_EXCEPTIONS может быть установлено в значение True (app.config['PROPAGATE_EXCEPTIONS'] = True
).
В этой статье прочитано, что - если значение PROPAGATE_EXCEPTIONS равно True, то
Исключения создаются повторно, а не обрабатываются обработчиками ошибок приложения. Если не установлено, это неявно верно, если включены TESTING или DEBUG.
В производственном режиме, когда я регистрирую обработчик ошибок следующим образом: @app.errorhandler(500)
. По умолчанию PROPAGATE_EXCEPTIONS
имеет значение False, а ошибка AttributeError (raise AttributeError
) из конечной точки достигает значения @app.errorhandler(500)
. Я понимаю, что это потому, что, как показано в этом коде , обработчик для 500 вызывается с ошибкой в качестве аргумента. Если бы существовал AttributeHandler, то он был бы вызван скорее, чем 500. Теперь, если я изменю app.config['PROPAGATE_EXCEPTIONS'] = True
и заново разверну приложение, то для той же конечной точки flask покажет обобщенную c 500 Внутренняя ошибка сервера , Я ожидал, что исключение AttributeError будет повторно вызвано. Почему это происходит? Это потому, что он был повторно поднят, но поскольку нет никакого обработчика для AttributeError, поэтому Flask выдает сообщение об ошибке 500, как это должно быть в рабочем режиме. Какой код отвечает за это поведение?
Если приложение находится в режиме отладки, то по умолчанию необработанные ошибки повторно возникают. Однако, если app.config['PROPAGATE_EXCEPTIONS'] = False
, обработчик ошибок 500 обработал ошибку. Поэтому PROPAGATE_EXCEPTIONS = False хорошо работает в режиме отладки. Но PROPAGATE_EXCEPTIONS = True не работает должным образом в производственном режиме. То есть - это не вызывает ошибку заново.