Python 使用函数进行request.form.get异常处理
我想做的是: 我让用户提交一个带有变量“symbol”的表单。我想检查一下,如果“符号”为空(即没有输入值),我会抛出一个错误 下面的代码运行良好:Python 使用函数进行request.form.get异常处理,python,flask,Python,Flask,我想做的是: 我让用户提交一个带有变量“symbol”的表单。我想检查一下,如果“符号”为空(即没有输入值),我会抛出一个错误 下面的代码运行良好: if request.method == "POST": if not request.form.get("symbol"): return apology("No symbol entered", 403) quote = lookup(request
if request.method == "POST":
if not request.form.get("symbol"):
return apology("No symbol entered", 403)
quote = lookup(request.form.get("symbol"))
if quote is None:
return apology("No such symbol found")
return render_template("quoted.html", name=quote['name'], price=quote['price'], symbol=quote['symbol'])
其中道歉(消息、代码)是一个用于呈现包含消息的网页的函数。lookup(symbol)是一个查找符号名称、价格并返回字典的函数。这段代码工作得很好
我必须把这段代码放在几个地方,所以我想构建一个可以使用的函数
所以我试着:
def checkSymbol(symbol):
if not symbol:
return apology("No symbol entered", 403)
quote = lookup(symbol)
if quote is None:
return apology("No such symbol found")
else:
return quote
在主体部分:
if request.method == "POST":
quote = checkSymbol(request.form.get("symbol"))
return render_template("quoted.html", name=quote['name'], price=quote['price'], symbol=quote['symbol'])
现在,如果用户输入一个有效的符号,代码就可以正常工作,我们可以这样做,但是如果用户将符号字段留空,错误就不会被捕获。相反,我得到一个错误,说元组键不能是字符串。我真的不知道,你想做什么,但是当你调用
checkSymbol()
函数时,它只返回值,主函数将继续执行,直到返回渲染模板…
所以我认为更好的检查方法是使func返回“是”或“否”,然后在主函数调用中道歉(…)
和检查符号()
:
或者类似的,我希望你能理解我想说的。当你打电话
检查symbol(request.form.get(“symbol”))
时,它的计算结果是一些错误\u code
,但是你不会对主体中的结果做任何事情。我在上面澄清了-如果“不是symbol”“条件已满足,我正在呈现一个错误HTML文件。如果没有checkSymbol函数,则会呈现errorpage;使用with函数时,errorpage不会显示,代码会在主体中继续,最终抛出一个未处理的错误。是的,问题也是一样的。当您从checkSymbol
返回渲染模板(“errorpage.html”)时,Flask进行渲染并生成一个表示错误页面的对象。。。但是结果没有发送到用户的浏览器,因为主体没有返回此对象。嗯,我很抱歉,因为我对此非常陌生,所以可能没有正确地询问。我更新了上面的问题,以准确显示我拥有的代码,我认为我返回的所有内容都正确吗?如果是错误的,你能告诉我哪一行和什么需要修理吗?
if request.method == "POST":
if checkSymbol(request.form.get("symbol")) == "no":
return apology("No symbol entered", 403)
else:
quote = lookup(request.form.get("symbol"))
return render_template("quoted.html", name=quote['name'], price=quote['price'], symbol=quote['symbol'])
def checkSymbol(symbol):
if not symbol:
return "no"
quote = lookup(symbol)
if quote is None:
return "no"
else:
return "yes"