У меня есть простое веб-приложение, созданное с использованием Flask / Python. У меня есть определяемое пользователем исключение, которое я использую, чтобы попытаться перехватить исключения в моем коде. Однако я хочу показать настраиваемую страницу ошибки для определяемого пользователем исключения. Во Flask я прочитал, что вам нужно использовать декоратор @errorhandler.
Во многих примерах, которые я читал, было что-то вроде этого:
@app.errorhandler(Exception)
#some code
У меня вопрос, что конкретно указано в скобках после @app.errorhandler? Вы передаете имя определенного вами класса исключения? Ни в одном из примеров, которые я читал в Интернете, на самом деле не говорится о том, что находится между круглыми скобками, поэтому я хотел бы знать, какое исключение передать в скобки.






Параметр для errorhandler - это ваше определяемое пользователем исключение. Внутри обработчика вы можете вернуть все, что захотите, включая шаблон. Например:
from flask import render_template
class MyCustomException(Exception):
pass
@app.errorhandler(MyCustomException)
def custom_handler(e):
return render_template('my_custom_error_page.html')
В этом случае при каждом вызове MyCustomException приложение будет возвращать html-страницу my_custom_error_page.html.
Вы можете проверить это, вызвав исключение. Например:
@app.route('/test_exception')
def test_exception():
raise MyCustomException('just testing :)')
В моем обработчике маршрута в моем приложении Flask я использую блок try-except для перехвата любых исключений. Однако на самом деле я вызываю исключения в своем коде Python, который отделен от файла, содержащего код обработчика маршрута. Даже если исключение было обнаружено в блоке try-except, как вы могли бы показать страницу с пользовательской ошибкой для этого исключения? Не могли бы вы снова возбудить исключение?
Если вы поймаете исключение, оно не сработает, и, следовательно, пользовательская страница не будет отображаться. Если вы хотите, чтобы он отображался даже с блоком try-except, просто добавьте эту строку в свой блок except: raise.
От документация он принимает код ошибки или класс исключения.