Python: Obteniendo el mensaje de error de una excepción

En Python 2.6.6, ¿cómo puedo capturar el mensaje de error de una excepción?

ES DECIR:

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") 

Esto no parece funcionar. Yo obtengo:

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

Pásalo a través de str() primero.

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

También tenga en cuenta que ciertas clases de excepción pueden tener atributos específicos que dan el error exacto.

Todo acerca de str es correcto, y otra respuesta más: una instancia de Exception tiene un atributo de message , y es posible que desee usarlo (si su IntegrityError personalizado no hace algo especial):

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

Debería usar unicode lugar de una string si va a traducir su aplicación.

Por cierto, en caso de que estés usando json debido a una solicitud de Ajax, te sugiero que devuelvas errores con HttpResponseServerError lugar de 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") 

y luego gestionar los errores en su procedimiento Ajax. Si lo deseas puedo publicar algún código de ejemplo.

Esto funciona para mí:

 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' )