Ошибка pset7 / finance.py: 'Ошибка типа: неподдерживаемая строка формата передана в список .__ формат__' - PullRequest
0 голосов
/ 15 декабря 2018

У меня продолжает появляться та же ошибка: «Покупка обрабатывает действительное приложение покупки, возникла исключительная ситуация (подробности см. В журнале)», и у меня нет ни малейшего понятия, что я должен изменить в своем коде, чтобы передать ошибку.

('Aandeel' - это голландский язык для акций).

Вот мой код:

def buy():
"""Buy shares of stock"""
# geldige invoer
if request.method == "POST":
    # check voor geldige invoer
    aandeel = lookup(request.form.get("symbol"))
    if not aandeel:
        return apology("Invalid input, please try again", 400)
    # check voor geldige invoer
    try:
        shares = int(request.form.get("shares"))
        if shares < 0:
            return apology("Shares must be a positive integer", 400)
    except:
        return apology("Invalid input, please try again", 400)
    if shares == None:
        return apology("Invalid input, please try again", 400)
    # hoeveelheid geld van user
    geld = usd(db.execute("SELECT cash FROM users WHERE id = :id", id=session["user_id"]))
    current_cash = usd(geld[0]["cash"])
    # ga na of het voldoende geld is
    if current_cash < usd(shares * aandeel["price"]):
        return apology("Unfortunately, you don't have enough money", 400)
    else:
        # voer transactie in
        db.execute("INSERT INTO transactions (id, symbol, shares, price, total, date_time) VALUES (:id, :symbol, :shares, :price, :total, DATETIME())",
                   id=session["user_id"], symbol=aandeel["symbol"], shares=shares, price=usd(aandeel["price"]), total=usd(aandeel["price"] * shares))
        # update de cash van de user
        db.execute("UPDATE users SET cash = cash - :purchase WHERE id:id;", \
                   purchase=usd(aandeel["price"] * shares), id=session["user_id"])
        # Select user shares of that symbol
        user_shares = db.execute("SELECT shares FROM portfolio \
                       WHERE id=:id AND symbol=:symbol", \
                       id=session["user_id"], symbol=aandeel["symbol"])
        # ingeval aankoop aandeel dat user nog niet bezit
        if not user_shares:
            db.execute("INSERT INTO portfolio (id, symbol, shares, price, total) \
                    VALUES(id:, :symbol, :shares, :price, :total)", \
                    symbol=aandeel["symbol"], shares=shares, price=usd(aandeel["price"]), \
                    total=usd(shares * aandeel["price"]), id=session["user_id"])
        # ingeval user al aandelen van dat bedrijf bezit
        else:
            shares_total = (user_shares[0]["shares"] + shares)
            db.execute("UPDATE portfolio SET shares=:shares \
                    WHERE id=:id AND symbol=:symbol", \
                    shares=shares_total, id=session["user_id"], \
                    symbol=aandeel["symbol"])
    return redirect("/", 400)
else:
    return render_template("buy.html")

Трассировка:

enter image description here

1 Ответ

0 голосов
/ 16 декабря 2018

Кажется, проблема в функции usd на этом сайте вызова:

geld = usd(db.execute("SELECT cash FROM users WHERE id = :id", id=session["user_id"]))

В трассировке отображается сообщение об ошибке

TypeError: unsupported format string passed to list.__format__

для строки

return f'${value:,.2f}'

Сообщение об ошибке соответствует value в операторе return, являющемся списком, а не ожидаемым числом:

>>> value = 10  
>>> f'${value:,.2f}'
'$10.00'

>>> value = [10]
>>> f'${value:,.2f}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__

Похоже, что помощник ожидает одно значение, например, 10, но db.execute возвращает список, например, [10].

Таким образом, исправление должно передать db.execute(...)[0]на usd.

Обратите внимание, что вам, вероятно, потребуется изменить или удалить следующую строку:

current_cash = usd(geld[0]["cash"])
...