【问题标题】:Parameter in route with Flask - local variable referenced before assignmentFlask 路由中的参数 - 分配前引用的局部变量
【发布时间】:2021-03-16 20:29:33
【问题描述】:

我正在尝试在 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 编程过,也不知道如何解决这个问题。

【问题讨论】:

  • 当您调用obj.start() 时,obj 尚未定义,因为您的 if 语句都没有评估为 True。换句话说,您的任何obj = Task() 语句都没有被调用。在 if 之前或 else 中定义 obj

标签: python flask


【解决方案1】:

这是因为 obj 没有在您的 if 语句逻辑中定义。也许添加一个else 并检查 None 像这样:

@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】:

    你有两个错误,协同工作:

    1. 您将苹果与橙子进行比较,即字符串与整数的比较。
    2. 您不处理无效的ids。

    第一个解决方案是在路由中添加一个转换器(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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-31
      • 2020-07-08
      • 1970-01-01
      • 2019-10-30
      • 2017-12-23
      • 1970-01-01
      • 2017-08-10
      • 2020-01-16
      相关资源
      最近更新 更多