Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数进行request.form.get异常处理_Python_Flask - Fatal编程技术网

Python 使用函数进行request.form.get异常处理

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

我想做的是: 我让用户提交一个带有变量“symbol”的表单。我想检查一下,如果“符号”为空(即没有输入值),我会抛出一个错误

下面的代码运行良好:

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"