#python #flask
Вопрос:
Я пытаюсь обработать параметры в пути маршрутизации в Flask:
@app.route('/example/<id>', methods=['GET'])
def tasks(id):
if id == 1:
obj = FirstTask()
elif id == 2:
obj = SecondTask()
elif id == 3:
obj = ThirdTask()
result = obj.start()
return make_response(jsonify({ 'data': { result } }), 200)
После запуска я получаю следующую ошибку:
«локальная переменная ‘obj’, на которую ссылаются перед назначением»
Я никогда не программировал на Python и не знаю, как это решить.
Комментарии:
1. Когда вы звонили
obj.start()
,obj
еще не было определено, потому что ни одно из ваших утверждений if не было оценено как истинное. Другими словами, ни одно из вашихobj = Task()
заявлений не было названо. Определитеobj
перед «если» или в «еще».
Ответ №1:
Это потому, что obj не определен в вашей логике оператора if. Может быть, добавить else
и проверить, нет ли ничего подобного:
@app.route('/example/<id>', methods=['GET'])
def tasks(id):
if id == 1:
obj = FirstTask()
elif id == 2:
obj = SecondTask()
elif id == 3:
obj = ThirdTask()
else:
obj = None
if obj is not None:
result = obj.start()
return make_response(jsonify({ 'data': { result } }), 200)
Ответ №2:
У вас есть две ошибки, работающие согласованно:
- Вы сравниваете яблоки с апельсинами, то есть строки с целыми числами.
- Вы не обрабатываете недопустимые
id
s.
Решение для первого-добавить конвертер в маршрут ( int:
), решение для второго-добавить else
:
from flask import abort
@app.route('/example/<int:id>', methods=['GET'])
def tasks(id):
if id == 1:
obj = FirstTask()
elif id == 2:
obj = SecondTask()
elif id == 3:
obj = ThirdTask()
else:
abort(404)
result = obj.start()
return make_response(jsonify({ 'data': { result } }), 200)