Flask / Python: обработчики ошибок для пользовательских исключений

У меня есть простое веб-приложение, созданное с использованием Flask / Python. У меня есть определяемое пользователем исключение, которое я использую, чтобы попытаться перехватить исключения в моем коде. Однако я хочу показать настраиваемую страницу ошибки для определяемого пользователем исключения. Во Flask я прочитал, что вам нужно использовать декоратор @errorhandler.

Во многих примерах, которые я читал, было что-то вроде этого:

@app.errorhandler(Exception)
#some code

У меня вопрос, что конкретно указано в скобках после @app.errorhandler? Вы передаете имя определенного вами класса исключения? Ни в одном из примеров, которые я читал в Интернете, на самом деле не говорится о том, что находится между круглыми скобками, поэтому я хотел бы знать, какое исключение передать в скобки.

От документация он принимает код ошибки или класс исключения.

CtheSky 14.05.2018 12:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
832
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Параметр для 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, как вы могли бы показать страницу с пользовательской ошибкой для этого исключения? Не могли бы вы снова возбудить исключение?

ceno980 14.05.2018 12:57

Если вы поймаете исключение, оно не сработает, и, следовательно, пользовательская страница не будет отображаться. Если вы хотите, чтобы он отображался даже с блоком try-except, просто добавьте эту строку в свой блок except: raise.

AArias 14.05.2018 13:18

Другие вопросы по теме