En python 2.6.6, comment puis-je capturer le message d'erreur d'une exception.
C'EST À DIRE:
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")
Cela ne semble pas fonctionner. Je reçois:
IntegrityError('Conflicts are not allowed.',) is not JSON serializable
Passez-le d'abord par str()
.
response_dict.update({'error': str(e)})
Notez également que certaines classes d'exceptions peuvent avoir des attributs spécifiques qui donnent l'erreur exacte.
Tout ce qui concerne str
est correct, encore une autre réponse: une instance Exception
a l'attribut message
et vous pourrez l'utiliser (si votre IntegrityError
personnalisé ne fait pas quelque chose de spécial):
except IntegrityError, e: #contains my own custom exception raising with custom messages.
response_dict.update({'error': e.message})
Vous devez utiliser unicode
au lieu de string
si vous souhaitez traduire votre application.
Au fait, si vous utilisez json à cause d'une requête Ajax, je vous suggère de renvoyer les erreurs avec HttpResponseServerError
plutôt que 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")
puis gérez les erreurs dans votre procédure Ajax .. Si vous le souhaitez, je peux publier un exemple de code.
Cela fonctionne pour moi:
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' )