私のフラスコWebアプリケーションでは、セッション処理のためにビーカーライブラリを使用しています。次のコードでは、いくつかの未知の理由により、プロダクションサーバが例外を発生させますが、私のローカルPCは正常です。python try exceptすべてのエラーをキャプチャしません
import sys
...
try:
beaker_session = request.environ['beaker.session']
beaker_session['user_id'] = user.id
beaker_session.save()
except:
flash(sys.exc_info()[0])
return render_template('main/login.html')
ローカルコンピュータは、例外なく、期待どおりにセッションを保存します。 プロダクションサーバ(RedHat OpenShift)は "beaker_session.save()"行でエラーを発生させます。しかし、フラッシュメッセージでログインページを表示する代わりに、内部サーバーエラー500がスローされます。私はビーカーのバックエンドのURL(mysqlのデータベース)をチェックし、問題はありません。なぜなら、コードの他の部分、つまり新しく登録されたユーザーを永続させるためです。 私の質問は1)なぜ部分を除いてもうまくいかないのですか? 2)ビーカーがセッションを保存できない理由 ありがとうございます。
場合 'except'一部が例外をキャッチさを=ここに一つ;おそらく 'except'ブロックで実行されているコードが*別の例外を引き起こしている可能性があります。サーバーのエラーログを調べて、500エラーになっている実際の例外が何であるかを調べます。 – Amber
私はサーバーのログを調べる方法を見つけました(rhc app tail -a myapp)。問題はdirの許可です(ビーカーのlock_dirが設定されていません)。私はまだtry/exceptが動作しなかった理由を理解できませんでした。なぜなら、他のケースでは、私の例外部分が期待どおりに動作していたからです。 – synergetic
@synergeticシステム割り込みやその他のシステム関連のエラーをキャッチして原因不明のエラーや奇妙なエラーにつながる可能性があるので、裸のもの以外は使用しないでください。 – codecool