Ответ 1
Сначала передайте его str()
.
response_dict.update({'error': str(e)})
Также обратите внимание, что некоторые классы исключений могут иметь определенные атрибуты, которые дают точную ошибку.
В 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
, если вы собираетесь перевести ваше приложение.
Кстати, если вы используете 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. Если вы хотите, я могу опубликовать некоторый пример кода.
Это работает для меня:
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' )