2017-11-06 23 views
1

私はflaskを使用しています。ここでは例を挙げています。私はフラスコのポータルからコードをコピーしました。アプリフラスコでの一般的な例外処理方法は?

(py35) [email protected]:tmp root$ flask run 
* Serving Flask app "hello" 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

を実行

from flask import Flask 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return 'Hello, World!' 

要求

[email protected]:~ root$ curl http://localhost:5000/ 
Hello, World! 

を送信し、私は私の機能を変更して、エラーを発生させるためにそれを変更。

@app.route('/') 
    def hello_world(): 
     print(xyz) 
     return 'Hello, World!' 

私は、要求を送信しようとすると、それは

[2017-11-06 10:22:13,625] ERROR in app: Exception on/[GET] 
Traceback (most recent call last): 
    File "/py35/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/py35/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/py35/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/nile2691/sbdev/StorageCenterUI/.tox/py35/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/py35/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "py35/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/private/tmp/hello.py", line 6, in hello_world 
    print(xyz) 
NameError: name 'xyz' is not defined 

を失敗した私は私のコードでtry...exceptを追加しますが、実際のコードでは、その多くの場所で、私はこの一般的に対処したいいけないことができています例外はどこでも。

が、代わりに私がカスタムエラーメッセージを表示して、適切な出力を返すようにしたい

curl http://localhost:5000/ 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>500 Internal Server Error</title> 
<h1>Internal Server Error</h1> 
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p> 

の下のような一般的なエラーを取得しての、この変更により

try: 
    process_flask_request() 
except Exception as ex: 
    # Log detail exception 
    logger.exception(ex) 
    return "Custome error message for all general exception" 

好きなようです。

+0

おそらく、このファイルをhttp://flask.pocoo.org/docs/0.12/patterns/errorpages/ –

+1

にチェックしてください。http://flask.pocoo.org/docs/latest/エラー処理/#アプリケーションエラー –

答えて

2

このようなエラーハンドラを含めることができます。もっとうまくあなたの例では、内部サーバーエラーを表示する:

import traceback 

(...some code...) 

@app.errorhandler(500) 
def internal_error(e): 
    """ 
    handle internal errors nicely 
    """ 
    tb = traceback.format_exc() 
    return render_template('error.html', 
          error=e.message, 
          traceback=tb), 500 

をテンプレートでは、その後、ショートエラーメッセージを出力し、詳細なスタックトレースを(あなたはユーザー管理を持っている場合は、おそらくユーザー権限に応じて)することができます。

質問のコメントに記載されているとおり、完全な画像を取得するにはドキュメントを読む必要があります。

関連する問題