2016-09-19 8 views
0

FalconフレームワークでHTTPハンドラで処理されない非特定の例外に対してHTTP 500ステータスで応答する方法はありますか?私は例外のために、次のハンドラを追加しようとしました:Falconフレームワークで未処理の例外でHTTP 500に応答する方法

api.add_error_handler(Exception, handler=lambda e, *_: exec('raise falcon.HTTPInternalServerError("Internal Server Error", "Some error")')) 

しかし、これは、たとえば、falcon.HTTPNotFoundをスローすることは不可能になる - それは上記のハンドラによって処理され、私は代わりに404

答えて

0

Iの500を受け取りますあなたの質問を正しく理解するかどうかはわかりません。

しかし、あなたはどの非特異的な例外にHTTP 500ステータスで応答を返すために、次のアプローチを使用することができます。

class MyFirstAPI: 
    def on_post(self, req, res): 
     try: 
      json_data = json.loads(req.stream.read().decode('utf8')) 
      # some task 
      res.status = falcon.HTTP_200 
      res.body = json.dumps({'status': 1, 'message': "success"}) 

     except Exception as e: 
      res.status = falcon.HTTP_500 
      res.body = json.dumps({'status': 0, 
           'message': 'Something went wrong, Please try again' 
           }) 
app = falcon.API() 
app.add_route("/my-api/", MyFirstAPI()) 

それとも、また次のようにpythonでデコレーターを使用することができます。

def my_500_error_decorator(func): 
    def wrapper(*args): 
     try: 
      func(*args) 
     except Exception as e: 
      resp.status = falcon.HTTP_500 
      resp.body = json.dumps({'status': 0, 'message': 'Server Error'}) 

return wrapper 

class MyFirstAPI: 
    @my_500_error_decorator 
    def on_post(self, req, res): 
     try: 
      json_data = json.loads(req.stream.read().decode('utf8')) 
      # some task 
      res.status = falcon.HTTP_200 
      res.body = json.dumps({'status': 1, 'message': "success"}) 
app = falcon.API() 
app.add_route("/my-api/", MyFirstAPI()) 
関連する問題