Исключение BuildError
Исключение BuildError наследуется от класса RoutingException
и вызывается, когда Flask не может создать URL-адрес
для заданного имени конечной точки. Это может произойти
из-за опечатки в имени функции, отсутствия обязательных
параметров или неверного типа переданных значений.
Синтаксис
from werkzeug.routing import BuildError
BuildError(message, endpoint=None, values=None)
Пример
Давайте рассмотрим ситуацию, когда имя конечной точки
указано с ошибкой. В этом случае Flask выбросит исключение
BuildError:
from flask import Flask, url_for
from werkzeug.routing import BuildError
app = Flask(__name__)
@app.route('/')
def index():
return 'hello'
with app.test_request_context():
try:
url_for('indx')
except BuildError as e:
res = str(e)
print(res)
Результат выполнения кода:
"Could not build url for endpoint 'indx'. Did you mean 'index' instead?"
Пример
Давайте попробуем построить URL для маршрута, который ожидает обязательный параметр, но не получит его:
from flask import Flask, url_for
from werkzeug.routing import BuildError
app = Flask(__name__)
@app.route('/user/<name>')
def user(name):
return name
with app.test_request_context():
try:
url_for('user')
except BuildError as e:
res = str(e)
print(res)
Результат выполнения кода:
"Could not build url for endpoint 'user'. Did you forget to specify values ['name']?"
Пример
Давайте обработаем исключение BuildError
и выведем понятное сообщение пользователю:
from flask import Flask, url_for
from werkzeug.routing import BuildError
app = Flask(__name__)
@app.route('/article/<int:id>')
def article(id):
return str(id)
with app.test_request_context():
try:
url_for('article', id='abcde')
except BuildError as e:
res = 'URL build failed'
print(res)
Результат выполнения кода:
"URL build failed"
Смотрите также
-
класс
HTTPException,
который является базовым для всех HTTP-исключений -
исключение
RoutingException,
от которого наследуется BuildError -
исключение
NotFound,
которое возникает при отсутствии запрошенного URL -
исключение
MethodNotAllowed,
которое возникает при недопустимом HTTP-методе