python - 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```
解决方案
当if datetime.today() < plan_end_date:
条件为假时,resp
变量无法初始化。但是你已经resp
在 return 声明中返回了。因此,在这种情况下,您是resp
在分配之前引用。并引发错误。
要消除此错误,请确保resp
在每个分支中初始化或在函数顶部使用default
值定义它。
推荐阅读
- python - `file.write` 中的错误,错误的参数类型
- php - 服务器上的 nginx 无法连接到 docker php-fpm
- python - Python DictReader 中的“错误:行包含 NULL 字节”
- qt - 如何在 qt webassembly 中使用 SQLITE
- c++ - googletest 在使用 libgtest_main.a 时给出多个主要定义,或者在不使用 libgtest_main.a 时给出未定义的测试参考
- dependency-injection - 如何使用 Autofac 注册通用服务?
- javascript - JS 中的递归挑战将所有可能的数组键组合为 true | 错误版本,我附上输入和输出
- flutter - 将三元运算符转换为 if 函数
- r - R:使用 chdir = TRUE 安全地使用源多个文件
- unity3d - 所以,Unity 和 Vs CODE 不能一起工作,我已经更新了所有的东西,下载了每个版本但它不工作