2010-12-16 11 views
32

Python 2.6.6では、例外のエラーメッセージをどのようにキャプチャできますか。Python:例外のエラーメッセージを取得する

IE:

response_dict = {} # contains info to response under a django view. 
try: 
    plan.save() 
    response_dict.update({'plan_id': plan.id}) 
except IntegrityError, e: #contains my own custom exception raising with custom messages. 
    response_dict.update({'error': e}) 
return HttpResponse(json.dumps(response_dict), mimetype="application/json") 

このdoesntのは動作するように見えます。私は得る:

IntegrityError('Conflicts are not allowed.',) is not JSON serializable 
+1

"このdoesntのは、動作するようです。" - それは何をしなければならないのでしょうか? – khachik

+0

あなたはどのバージョンのPythonを使用していますか? – infrared

+0

こんにちは、私は私の質問を更新しました。ありがとう – Hellnar

答えて

28

初めてstr()を渡す。

response_dict.update({'error': str(e)}) 

特定の例外クラスには、正確なエラーを示す特定の属性が含まれていることがあります。 Exceptionインスタンスmessage属性を持っており、あなたは(あなたのカスタマイズIntegrityErrorは特別な何かをしていない場合)、それを使用したい場合があります:

except IntegrityError, e: #contains my own custom exception raising with custom messages. 
    response_dict.update({'error': e.message}) 
+4

しかし、それはユニコードでは失敗しますか? –

4

すべてアプリケーションを翻訳する場合は、stringの代わりにunicodeを使用してください。

from django.http import HttpResponse, HttpResponseServerError 
response_dict = {} # contains info to response under a django view. 
try: 
    plan.save() 
    response_dict.update({'plan_id': plan.id}) 
except IntegrityError, e: #contains my own custom exception raising with custom messages. 
    return HttpResponseServerError(unicode(e)) 

return HttpResponse(json.dumps(response_dict), mimetype="application/json") 

をして、あなたのAjaxの手順でエラーを管理:

ところで、あなたは理由AjaxリクエストのJSONを使用しているイム場合、私はHttpResponseServerErrorではなくHttpResponseバックエラーを送信するためにあなたを示唆しています。 ご希望の場合は、サンプルコードを投稿していただけます。

+12

Python 2.6以降、BaseException.message属性は推奨されていません。参照:http://stackoverflow.com/questions/1272138/baseexception-message-deprecated-in-python-2-6 – bosgood

3

あなたがすべき程度strが正しいか、また別の答えは

0

これは私の作品:

def getExceptionMessageFromResponse(oResponse): 
    # 
    ''' 
    exception message is burried in the response object, 
    here is my struggle to get it out 
    ''' 
    # 
    l = oResponse.__dict__['context'] 
    # 
    oLast = l[-1] 
    # 
    dLast = oLast.dicts[-1] 
    # 
    return dLast.get('exception') 
関連する問題