CS50 PSET7引用:'NoneType'错误

时间:2017-05-06 22:01:12

标签: python cs50

我在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()
    }

2 个答案:

答案 0 :(得分:1)

如果请求中没有 symbol = request.args.get("symbol") quote = lookup(symbol) 参数,则会出现该错误。

.get(...)

由于它不存在,None将返回lookup(None),当您致电symbol时,它会尝试运行以下行,Noneif 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")