首页 > 解决方案 > Flask 引发的间歇性错误:UnboundLocalError: local variable 'resp' referenced before assignment

问题描述

如果此代码失败,那么我的 Flask 应用程序中应该还有其他代码块。我已经尝试了各种方法来解决这个问题,然后突然我再次遇到这个错误,没有更改任何代码:/我是 python 的新手,我想所以任何帮助将不胜感激,提前谢谢你们。

@flask_app.route('/demo/login', methods=['POST']) 
def login():

    if request.method == 'POST':

        #successful login [DL3.2] 
        if pem.validate_sis_login(request.form['username'],request.form['password']) == True:
        
            #plan expired?
            db = sqlite3.connect(__CORE_DB_PATH__)
            cursor = db.cursor()
            cursor.execute("SELECT plan_end_date FROM accounts WHERE username='"+request.form['username']+"'")
            result = cursor.fetchone() 
            db.close()
            plan_end_date = datetime.strptime(str(result[0][:19]),'%Y-%m-%d %H:%M:%S')
            
            if datetime.today() < plan_end_date:

                if datetime.today() > plan_end_date:

                    resp = make_response(render_template('account_expired.html'))

                else:

                    resp = make_response(render_template('pmuser_loggedin.html'))
                    resp.set_cookie('sis_login', request.form['username'])
                    resp.set_cookie('sis_pswd', request.form['password'])

                    # GET ORG to find right USER DB: -----------------
                    global __DBUSER__
                    db = sqlite3.connect(__CORE_DB_PATH__)
                    cursor = db.cursor()
                    cursor.execute("SELECT org_abbrev FROM accounts WHERE username='"+request.form['username']+"'")
                    result = cursor.fetchone() 
                    db.close()
                    org = str(result)[1:-2]
                    __DBUSER__ = org
                    
                    resp.set_cookie('__DBUSER__', __DBUSER__)
        
        else:

            resp = make_response(render_template('index_demo.html',message="Username and or password were not recognised, please try again"))
        
    return resp```

标签: pythonflask

解决方案


if datetime.today() < plan_end_date:条件为假时,resp变量无法初始化。但是你已经resp在 return 声明中返回了。因此,在这种情况下,您是resp在分配之前引用。并引发错误。

要消除此错误,请确保resp在每个分支中初始化或在函数顶部使用default值定义它。


推荐阅读