0

看下面的代码,

if 'COMPONENTS' in prod.keys() and len(prod['COMPONENTS'])>0 and len(prod['COMPONENTS'][0])>1 and len(prod['COMPONENTS'][0][1])>0 and len(prod['COMPONENTS'][0][1][0])>2:
  names = prod['COMPONENTS'][0][1][0][2]

  if type(names) == list and len(names)>0 and type(names[0]) == str:
    #names is proper. Now fetch prices
    if len(prod['COMPONENTS'][0])>3:
      lnames = len(names)
      prices = [prod['COMPONENTS'][0][3][i][2][1][0][1] for i in range(0, lanmes)]

看看我是如何使用prod['COMPONENTS'][0][1][0][2]andprod['COMPONENTS'][0][3][i][2][1][0][1]的。prod是一个非常深的嵌套列表。我想检查元素是否存在于此类索引中。

我没有找到任何办法。目前我在 if 语句上使用了长条件。见上面它们有多长。他们很可怕。

那么有什么方法可以检查是否prod可以满足['COMPONENTS'][0][3][i][2][1][0][1]索引?

4

1 回答 1

2

最简单的方法就是这样做并捕获错误:

try:
    names = prod['COMPONENTS'][0][1][0][2]
except LookupError:
    print "It failed"
    # Do whatever you need to do in case of failure

LookupError 将捕获列表中缺失的索引或字典中缺失的键。

不过,不用说,您已经发现了真正的问题:您使用的是笨拙且笨拙的数据结构。通过以不同的方式存储数据,可能会绕过该问题。

于 2013-06-21T18:48:56.860 回答