🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

7100閲覧

print()した中身を表示させる方法

aae_11

総合スコア178

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/11/16 02:09

編集2019/11/16 02:10

現在、Django公式チュートリアルにて、Djangoの学習を行なっているのですが、print()関数を使用した際に、うまく出力できずに困っています。
リンク先の「polls/views.py」ファイルに、import sysを追加し、voteメソッド内にprint(selected_choice)sys.exit()を追加しました。

def vote(request, question_id): question = get_object_or_404(Question, pk=question_id) try: selected_choice = question.choice_set.get(pk=request.POST['choice']) print(selected_choice) sys.exit() except (KeyError, Choice.DoesNotExist): # Redisplay the question voting form. return render(request, 'polls/detail.html', { 'question': question, 'error_message': "You didn't select a choice.", }) else: selected_choice.votes += 1 selected_choice.save() # Always return an HttpResponseRedirect after successfully dealing # with POST data. This prevents data from being posted twice if a # user hits the Back button. return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

しかし、実際に、「127.0.0.1:8000/polls/」としアクセスし、voteメソッドを呼び出す所まで進めたのですが、「A server error occurred. Please contact the administrator.」と表示され、print(selected_choice)の中身が呼ばれません。また、コンソールには line 28, in vote sys.exit() SystemExitと表示されるのみです。
printした中身を表示させる方法が分からない為、教えて頂けましたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そんなところでsys.exitを呼んでしまってはダメです。ブラウザーにHTTPレスポンスを返す前に強制終了させています。

デバッグ用に値を確認したいというのであれば、それこそ先のご質問
デバッグの方法について - teratail#223302
で私がコメントさせてもらったように、print(selected_choise, file=sys.stderr) としてコンソールやエラーログに出力するか、sys.exitを呼ばずにただprintしてみるか、がんばってテンプレートに載せるかしましょう。

投稿2019/11/16 02:41

dodox86

総合スコア9256

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

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

aae_11

2019/11/16 02:51 編集

ご回答ありがとうございます。 実は「print(selected_choise, file=sys.stderr)」こちらなのですが、「file=sys.stderr」ここの部分が何を示しているのかが良く分からなくて...stderr関数および、「file」とは何を示しているのでしょうか...?
dodox86

2019/11/16 02:53

file=sys.stderr とは、printの出力先を「標準エラー出力」と言うファイルにすることを指定しています。そこをご存じなければ、「標準入出力」を勉強する必要があります。
dodox86

2019/11/16 02:57 編集

回答の話へ追加ですが、「print("", flush=True)」をsys.exit の前に入れると、もしかしたら少しだけでも表示されるかもしれません。強制終了の前にバッファリングされたprintのメッセージを無理やり出力してしまおう、との意図です。簡単であろうから、ダメもとで試してみてください。
aae_11

2019/11/16 02:58 編集

ご返信ありがとうございます。 こちら「標準エラー出力」ファイルなのですが、どのようなファイル名か教えて頂けませんでしょうか...?
dodox86

2019/11/16 03:15

「標準エラー出力」とはファイル名を持つ例えばディスク上のファイルではないのです。どちらかと言うと論理的なもので、Python/Djangoに限らず、ほとんどのプログラミング言語とOSで出てくる概念です。初めて知ったのであればコメント欄でひとことで終わるような話ではありませんし、書いたとしてもおそらくピンとこないと思います。ですので詳細はここではご勘弁ください。 https://docs.python.org/ja/3.6/library/sys.html?highlight=stderr#sys.stderr] teratail内でも「標準入出力」や「標準エラー出力」で検索すると、過去にたくさん質問回答がなされていたことが分かります。それらも参考になるかもしれません。分かりづらければ今は後まわしにしても良いかもしれませんが、プログラミングを続けていたら、いずれ出てくると思います。
aae_11

2019/11/16 03:40

ご説明いただきありがとうございます。 標準入力などに関しては、後ほど調べておこうと思います。 「print(selected_choise, file=sys.stderr)」こちらこのようにした場合なのですが、例えば、ターミナルやアドレスにアクセスをしたブラウザなど、どの場所を確認すれば、print()した内容を確認できますかね...?
aae_11

2019/11/16 06:06

アクセスしてみましたら、コンソールにて、「127.0.0.1/polls/」にて選択したものが表示されました。 恐らく、choiceオブジェクトの「choice_text」フィールドかと思われます! なんとなく、ターミナルでのデバッグの方法がわかってきました。 ターミナルでデバッグする際は、print(selected_choise, file=sys.stderr)こちらを記述し変数の値など確認していきたいと思います。
dodox86

2019/11/16 06:10

よかったです。引き続きがんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問