Flask框架报UnboundLocalError: val变量赋值前引用问题修复求助
Flask UnboundLocalError 报错排查与修复方案
报错根因
该报错是变量val的作用域逻辑问题导致的:
- 只有请求方法为
POST时,代码才会进入if request.method == "POST"分支,此时才会定义val变量 - 当请求是
GET方法时,不会进入上述分支,val变量从未被定义,但最后执行return时直接将val作为参数传给了模板,因此触发「变量赋值前被引用」的报错
修复方案
你可以根据自己的业务需求选择以下任意一种方案:
方案1:提前给val设置默认值
在if判断前先初始化val,兼容GET请求的场景:
@app.route("/",methods = ["GET","POST"]) def hello(): val = "" # 可根据需求替换为其他默认值,比如None、默认提示文本等 if request.method == "POST": text = request.form['txt'] val = m.predict_statement(text) return render_template("index.html",values = val)
提示:如果模板需要区分POST/GET的展示效果,默认值可以设置为
"请输入内容后提交查询"这类提示文本,前端体验更好。
方案2:按请求类型分分支返回
如果GET请求时模板不需要用到values参数,可以分开写返回逻辑:
@app.route("/",methods = ["GET","POST"]) def hello(): if request.method == "POST": text = request.form['txt'] val = m.predict_statement(text) return render_template("index.html",values = val) # GET请求单独返回,不需要传val参数 return render_template("index.html")
内容的提问来源于stack exchange,提问作者aish 1352
相关产品推荐
相关产品推荐

