item
это словарь Python
print item.get('body')
в некоторых случаях дает следующий вывод:
"1211V1"
однако item.get('body') в основном имеет строку юникода в формате:
u'{"points_token_id":"327727a0-3909-4132-8fa2-ee45146add1e"}'
Мне нужно было преобразовать указанную выше строку Unicode в словарь Python. Итак, я делаю это:
try:
body_dic = json.loads(item.get('body'))
body_string = ""
for body_item in body_dic.keys():
body_string += body_item + ": {'required': True, 'type': 'resource', 'value': " + str(body_dic.get('body_item')) + "\n\t\t\t\t"
except Exception as e:
print "futt gayaa"
print type(e).__name__
print e.args
body_string = item.get('body')
а затем куча кода после этого. Таким образом, в приведенном выше моменте item.get('body') оказывается "1211V1", должно быть возбуждено ValueError Exception и поток выполнения должен попасть в блок except. Я прав ?
Однако он не поднимается, и поток выполнения продолжает переходить на следующую строку:
for body_item in body_dic.keys():
а затем возникает следующее исключение:
AttributeError ("у объекта 'unicode' нет атрибута 'ключи'",)
который я узнаю, если я изменю блок except выше, чтобы поймать общее исключение как:
except Exception as e:
print "futt gayaa"
print type(e).__name__
print e.args
body_string = item.get('body')
Пожалуйста, помогите мне понять это. На мой взгляд, в тот момент, когда возникает первое исключение (которое в нашем случае должно быть ValueError Exception), поток управления должен перейти в блок catch. Почему он переходит к следующей строке кода, а затем, когда возникает Исключение атрибута, он перехватывается.
json.loads
возвращает строку - person Jean-François Fabre   schedule 23.10.2017