我在CS50的PSET 7中遇到views
的问题。每次我进入CS50金融网站,它都会返回:
/quote
我不确定这意味着什么,也不确定如何修复它。它似乎在查找功能中自动转到“无”,但我不确定原因。如果有人可以帮助我,我会非常感激!
这是我在application.py中的引用部分:
AttributeError: 'NoneType' object has no attribute 'startswith'
这是我的helpers.py,不应该更改:
@app.route("/quote", methods=["GET", "POST"])
@login_required
def quote():
"""Get stock quote."""
if request.method == "POST":
symbol = request.args.get("symbol")
quote = lookup(symbol)
return render_template("quoted.html", name=quote)
else:
return render_template("quote.html")
最后,这是我的quote.html:
def lookup(symbol):
"""Look up quote for symbol."""
# reject symbol if it starts with caret
if symbol.startswith("^"):
return None
# reject symbol if it contains comma
if "," in symbol:
return None
# query Yahoo for quote
# http://stackoverflow.com/a/21351911
try:
url = "http://download.finance.yahoo.com/d/quotes.csv?f=snl1&s={}".format(symbol)
webpage = urllib.request.urlopen(url)
datareader = csv.reader(webpage.read().decode("utf-8").splitlines())
row = next(datareader)
except:
return None
# ensure stock exists
try:
price = float(row[2])
except:
return None
# return stock's name (as a str), price (as a float), and (uppercased) symbol (as a str)
return {
"name": row[1],
"price": price,
"symbol": row[0].upper()
}
答案 0 :(得分:1)
如果请求中没有 symbol = request.args.get("symbol")
quote = lookup(symbol)
参数,则会出现该错误。
.get(...)
由于它不存在,None
将返回lookup(None)
,当您致电symbol
时,它会尝试运行以下行,None
为if symbol.startswith("^"):
:
None.startswith(...)
这意味着您正在尝试symbol
,解释您看到的错误。
您可以检查缺少None
/ symbol = request.args.get("symbol")
if symbol:
quote = lookup(symbol)
return render_template("quoted.html", name=quote)
else:
return render_template("missing_symbol.html")
的情况并显示错误消息。
Logger::WriteMessage("some text");
或者您可以忽略它:如果没有符号,请求可能无效,您可以接受它会导致错误。
答案 1 :(得分:0)
我设法找到了答案,我应该说:
symbol = request.form.get("symbol")
代替:
symbol = request.args.get("symbol")
。