2017-05-10 4 views
0

私のプログラムがtry catchブロックで定義されたエラーコードiのjson応答を返さない理由を理解できません。返品処理例外

json = request.json 
return jsonify(controller.new_configuration(json)) 

これは

Controller.py

def new_configuration(self, data): 

    try: 
     self.config.read('system/settings.ini') 
     self.config.set('service_configuration', 'servid', data['servID']) 
     self.config.set('service_configuration', 'uri', data['uri']) 
     self.config.set('service_configuration', 'res_temp_min', data['res_temp_min']) 

     for param in data['modelParameters']: 
      self.config.set('model_param', param['k'], param['v']) 

     with open('system/settings.ini', 'w') as configfile: 
      self.config.write(configfile) 

    except TypeError as e: 
     return {"rc": 1, "rcDesc": e} 
    except ValueError as e: 
     return {"rc": 1, "rcDesc": e} 
    except KeyError as e: 
     self.log.warning(e) 
     return {"rc": 1, "rcDesc": e} 
    except AttributeError as e: 
     self.log.warning(e) 
     return {"rc": 1, "rcDesc": e} 

    return {"rc": 0, "rcDesc": "ok"} 
にイム故意はTypeErrorのJSONを送信し、私はそれを返すべきであると思い、私の関数new_configurationある{ "RC":1、 "rcDescを":E}が、そうではありません。 私が代わりにこのエラーを持って、アプリの休憩:

raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: KeyError('servID',) is not JSON serializable 
+0

あなたが受け取ったエラーメッセージには何が不明ですか? Exceptionインスタンスのシリアライズをどのように想定しますか? –

+0

'jsonify'を' try/except'ブロックで囲むべきでしょう...この関数が例外をスローするように見えます。 –

答えて

1

eの種類は、あなたがJSON

試みとしてシリアル化できませんエラーのいくつかの並べ替え、ですので:

return {"rc": 1, "rcDesc": repr(e)} 

はまた引きますあなたがやっていることに応じて、これらのエラーは個別には必要ないかもしれません。

+0

それはうまくいった!これはapiの応答として動作するはずです。私はエラーコードと説明を返したい。 –