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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

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

Q&A

2回答

3958閲覧

Key Errorだが、どこが原因か分からない

Pablito

総合スコア71

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

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

0グッド

1クリップ

投稿2019/08/02 05:42

前提・実現したいこと

Head First PythonでPythonを勉強しています。
関数デコレーターを使って、URLへのアクセスを
制限したりしようとしています。

一通りコードを書き終わり、実行し、
Websiteを作動させてみました。
基本的に動きは悪くないのですが、
http://127.0.0.1:5000/logout
をした時だけ以下のエラーが起きました。

発生している問題・エラーメッセージ

KeyError KeyError: 'logged_in' Traceback (most recent call last) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2328, in __call__ return self.wsgi_app(environ, start_response) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2314, in wsgi_app response = self.handle_exception(e) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1760, in handle_exception reraise(exc_type, exc_value, tb) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\_compat.py", line 36, in reraise raise value File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2311, in wsgi_app response = self.full_dispatch_request() File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1834, in full_dispatch_request rv = self.handle_user_exception(e) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1737, in handle_user_exception reraise(exc_type, exc_value, tb) File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\_compat.py", line 36, in reraise raise value File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1832, in full_dispatch_request rv = self.dispatch_request() File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1818, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "G:\マイドライブ\for python\for website\simple_web.py", line 33, in do_logout session.pop('logged_in') File "C:\Users[]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\werkzeug\datastructures.py", line 269, in pop rv = super(UpdateDictMixin, self).pop(key) KeyError: 'logged_in'

該当のソースコード

Python

1from flask import Flask, session 2 3from checker import check_logged_in 4 5app = Flask(__name__) 6 7@app.route('/') 8def hello() -> str: 9 return 'Hello from the simple web application.' 10 11@app.route('/page1') 12@check_logged_in 13def page1() -> str: 14 return 'This is page1' 15 16@app.route('/page2') 17@check_logged_in 18def page2() -> str: 19 return 'This is page 2.' 20 21@app.route('/page3') 22@check_logged_in 23def page3() -> str: 24 return 'This is page 3.' 25 26@app.route('/login') 27def do_login() -> str: 28 session['logged_in'] = True 29 return 'You are in now.' 30 31@app.route('/logout') 32def do_logout() -> str: 33 session.pop('logged_in') 34 return 'Currently out' 35 36app.secret_key = 'YouWillNeverGuessMySecretKey' 37 38if __name__ == '__main__': 39 app.run(debug=True)

何卒宜しくお願い致します。

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

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

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

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

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

mistn

2019/08/02 07:21

loginページに行った後にlogoutページに行っても同じエラーが出ますか?
guest

回答2

0

session.pop(key)を実行すると、keyが削除されるようです。

実際にPycharmで実行し、session.pop('logged_in')の前後の値(session.get('logged_in'))を確認しましたが、実行する前は[True]、実行後は[None]でした。

存在しないkeyを取得しようとしているのが原因だと思います。

エラーになるのが困るというのであれば、以下の様にしてはいかがでしょうか?

python

1session.pop('logged_in', None)

ちなみに、これは何が質問なんでしょうか?

投稿2019/08/11 10:24

FiroProchainezo

総合スコア2401

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

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

0

門外漢なので回答じゃなくてアプローチ方法になりますが
session.pop('logged_in')
をtry-catchでくくってcatch内でsessionの中身をログするなどしたらどうでしょうか

投稿2019/08/02 11:18

pea

総合スコア419

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問