python 2.6.6では、どのように例外のエラーメッセージをキャプチャできますか。
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")
これは機能しないようです。私は得る:
IntegrityError('Conflicts are not allowed.',) is not JSON serializable
最初にstr()
を介して渡します。
response_dict.update({'error': str(e)})
また、特定の例外クラスには、正確なエラーを与える特定の属性がある場合があることに注意してください。
str
のすべてが正しいが、さらに別の答え:Exception
インスタンスにはmessage
属性があり、それを使用することができます(カスタマイズされたIntegrityError
が特別なことはしないでください):
except IntegrityError, e: #contains my own custom exception raising with custom messages.
response_dict.update({'error': e.message})
アプリケーションを翻訳する場合は、unicode
の代わりにstring
を使用する必要があります。
ところで、Ajaxリクエストのためにjsonを使用している場合、HttpResponseServerError
ではなくHttpResponse
でエラーを返送することをお勧めします。
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プロシージャのエラーを管理します。ご希望の場合は、サンプルコードを投稿できます。
これは私のために働く:
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' )