如何检查列表中具有特定索引的元素的存在?

时间:2015-01-16 10:02:05

标签: python

我提取从第三方服务器收到的数据:

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'对象不可迭代

我该如何修改自己的病情?

1 个答案:

答案 0 :(得分:2)

您的result[38]值为Nonelen(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: