Python: получение сообщения об ошибке исключения - PullRequest
33 голосов
/ 16 декабря 2010

В 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

Ответы [ 4 ]

31 голосов
/ 16 декабря 2010

Сначала пропустите str().

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

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

4 голосов
/ 16 декабря 2010

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

except IntegrityError, e: #contains my own custom exception raising with custom messages.
    response_dict.update({'error': e.message})
3 голосов
/ 16 декабря 2010

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

0 голосов
/ 29 декабря 2017

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

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' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...