Подтвердить что ты не робот

Python: получение сообщения об ошибке исключения

В 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
4b9b3361

Ответ 1

Сначала передайте его str().

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

Также обратите внимание, что некоторые классы исключений могут иметь определенные атрибуты, которые дают точную ошибку.

Ответ 2

Все о str является правильным, еще один ответ: экземпляр Exception имеет атрибут message, и вы можете его использовать (если ваш настраиваемый IntegrityError не делает что-то особенное):

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

Ответ 3

Вы должны использовать unicode вместо string, если вы собираетесь перевести ваше приложение.

Кстати, если вы используете json из-за запроса Ajax, я предлагаю вам отправлять ошибки с 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. Если вы хотите, я могу опубликовать некоторый пример кода.

Ответ 4

Это работает для меня:

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