質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

3回答

1210閲覧

【デバッグ】Pythonでrequestの中身を見る方法

ShinyaIshizaki

総合スコア27

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/08/18 12:02

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

Python

1 #cash check (How much do you have?) 2 try: 3 cash = db.execute("SELECT cash FROM users WHERE id = ?", user_id) 4 except: 5 return apology("Error db exception") 6 #enough chec k(Is the price much expensive than you have?) 7 getPrice = lookup(request.form.get("symbol"))['price'] 8 #buy 9 if getPrice < cash[0]["cash"]: 10 print("You can buy it") 11 return redirect("/") 12 else: 13 return apology("cash is not enough")

とすることでリストから価格を取得し、所持金と比較することができました。

投稿2021/08/19 00:12

ShinyaIshizaki

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • デバッグしたいのですが、requestの中身をどうすれば見られるか分かりません。

この文が何を求めているかは良くわかりませんので、エラーメッセージだけ解説します。

エラーコードは

python

1File "/home/ubuntu/finance/application.py", line 74, in buy 2if request.form.get("price") > cash: 3TypeError: '>' not supported between instances of 'NoneType' and 'list'

ですね。

request.form.get("price")はNoneです。cashはリストです。'>'では比べられません。

という意味です。

request.form.get("price")がNoneになっているのは、Flaskで受け取ろうとしたときに、"price"というパラメータが存在しなかったからです。
リストは'>'を使って辞書式順序で比較することはできますが、やりたいことを考えると、cashがリストであること自体が間違っているように思えます。

これらの情報だけでは、どこに問題があるかは特定できませんが、まず、"price"というパラメータがないことと、なぜcashがリストなのかを調べるべきでしょう。

投稿2021/08/18 15:49

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずは type() で request.form.get("price") と cash の型を調べたら?

前者は文字列っぽいですし、後者は配列かなんかじゃないんスかね?

で > を使って比較するなら双方とも数値型にしてやる必要があるのではないですかねえ。

投稿2021/08/18 12:18

takasima20

総合スコア7464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問