前提・実現したいこと
Python(CakePHP)で株の売買システムを作っています。
(題材:「CS50 for Japanese: コンピュータサイエンスの入門」(ホーム > CS50x 2021 > Week9 > Problem Set 9 > Finance)
URL: https://cs50.jp/x/2021/week9/problem-set/finance/)
株の購入機能(def buy())を実装中に「#enough check」(所持金が株価より多いかをチェック)にて以下のエラーメッセージが発生しました。
[Application.py]、[helpers.py]、[buy.html]が関係しています。
デバッグしたいのですが、requestの中身をどうすれば見られるか分かりません。
教えていただけると幸いです。
発生している問題・エラーメッセージ
File "/home/ubuntu/finance/application.py", line 74, in buy if request.form.get("price") > cash: TypeError: '>' not supported between instances of 'NoneType' and 'list'
該当のソースコード
[Application.py] @app.route("/buy", methods=["GET", "POST"]) @login_required def buy(): """Buy shares of stock""" user_id = session["user_id"] # send GET requests to the buy form if request.method == "POST": #blanc check if (request.form.get("symbol") == "") or (request.form.get("shares") == ""): return apology("must provide stock symbol and number of shares") #existance check if lookup(request.form.get("symbol")) == None: return apology("symbol is not exist") #numeric check if request.form.get("shares").isnumeric() == False: return apology("symbol must be numeric") #minus check if (request.form.get("shares")) <= "0": return apology("shares must be over zero") #cash check cash = db.execute("SELECT cash FROM users WHERE username = ?", request.form.get(user_id)) #enough check if request.form.get("price") > cash: return apology("cash is not enough")
[helpers.py] def lookup(symbol): """Look up quote for symbol.""" # Contact API try: api_key = os.environ.get("API_KEY") url = f"https://cloud.iexapis.com/stable/stock/{urllib.parse.quote_plus(symbol)}/quote?token={api_key}" response = requests.get(url) response.raise_for_status() except requests.RequestException: return None # Parse response try: quote = response.json() return { "name": quote["companyName"], "price": float(quote["latestPrice"]), "symbol": quote["symbol"] } except (KeyError, TypeError, ValueError): return None
[buy.html] {% extends "layout.html" %} {% block title %} Buy {% endblock %} {% block main %} <form action="/buy" method="post"> <div class="form-group"> <input autocomplete="off" autofocus class="form-control" name="symbol" placeholder="symbol" type="text"> </div> <div class="form-group"> <input class="form-control" name="shares" placeholder="shares" type="text"> </div> <button class="btn btn-primary" type="submit">Buy</button> </form> {% endblock %}
試したこと
「Python request デバッグ」でGoogle検索する
補足情報(FW/ツールのバージョンなど)
OS:Windows10
ツール:AWS Cloud9
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。