我提取从第三方服务器收到的数据:
data = json.loads(response)
if data:
result = data.get('result')
if result and len(result)>=38 and len(result[38])>=2:
for item in result[38][2]:
...
条件的想法是检查列表是否包含具有索引38(result[38]
)的元素和具有索引2(result[38][2]
)的子元素,但看起来它不起作用,因为我得到以下例外 -
如果结果和len(结果)> = 38和len(结果[38])> = 2:
TypeError:“NoneType”类型的对象没有len()
或
结果[38] [2]中的项目:
TypeError:'NoneType'对象不可迭代
我该如何修改自己的病情?
答案 0 :(得分:2)
您的result[38]
值为None
,len(result[38])
失败,因为None
单身人士没有长度。即使它不是None
,您的测试也可能会失败,因为您需要 39 元素来存在索引38,但您只测试是否至少有38个元素。如果正好有38个元素,那么您的len(result) >= 38
测试会成立,但您仍然会获得IndexError
。
使用异常处理,而不是测试每个元素:
data = json.loads(response)
try:
for item in data['result'][38][2]:
# ...
except (KeyError, TypeError, IndexError):
# either no `result` key, no such index, or a value is None
pass
这比测试所有干预元素要简单得多:
if result and len(result) > 38 and result[38] and len(result[38]) > 2: