【发布时间】:2018-04-04 00:43:58
【问题描述】:
item是一个python字典
print item.get('body')
在某些情况下会给出以下输出:
“1211V1”
然而,item.get('body') 大多具有以下格式的 unicode 字符串:
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():
然后引发以下异常:
属性错误 ("'unicode' 对象没有属性 'keys'",)
如果我更改上面的 except 块以捕获通用异常,我会知道:
except Exception as e:
print "futt gayaa"
print type(e).__name__
print e.args
body_string = item.get('body')
请帮助我理解这一点。在我看来,当第一个异常被引发时(在我们的例子中应该是 ValueError Exception),控制流应该进入 catch 块。为什么它会转到下一行代码,然后当 Attribute Exception 被引发时它会被捕获。
【问题讨论】:
-
请提供一个minimal reproducible example 来证明错误。
-
你可能序列化了一个字符串,而不是一个字典。所以
json.loads返回一个字符串
标签: python exception valueerror