2011-10-28 133 views
1
movies=["the holy grail",1975,"terry jones & Terry gilliam",91, 
    ["gilliam chapman",["michael palin","john cleese","terry gilliam","eric idle","terry jones"]]] 

for each_item in movies: 
if isinstance(each_item , list): 
    for nested_item in each_item: 
      if isinstance(nested_item , list): 
        for each_d in nested_item: 
          print(each_d) 
else: 
    print(nested_item) 
else: 
    print(each_item) 

当我运行这段代码在IDLE它给错误: -Python中的名称错误,也是什么是在Python中的缩进错误?

回溯(最近通话最后一个): 文件 “C:\用户\ SUMIT \桌面\ 3d_array.py”,第12行在 打印(nested_item) NameError:名字“nested_item”没有定义

我不知道为什么这个错误就要和压痕错误来临之前还当我删除了错误语法错误是未来的“其他: “这是否是错误的系统?我们可以帮助我。

+3

请正确格式化你的代码。每行4个空格将会得到很好的格式。你可以使用预览器来帮忙。 –

+1

你的缩进遍布各处。某些情况下1个空间,其余3个,其余8个空间。您可能会从阅读[Python风格指南](http://www.python.org/dev/peps/pep-0008/)中受益! :) – jathanism

+0

嘿...感谢家伙我得到它....我的缩进是错误的。我得到它纠正thanx为你的帮助.. –

回答

0

我不能告诉你怎么有这从您的帖子缩进,但我认为不正确的缩进是问题,因为下面的代码工作:

movies=["the holy grail",1975,"terry jones & Terry gilliam",91, ["gilliam chapman",["michael palin","john cleese","terry gilliam","eric idle","terry jones"]]] 

for each_item in movies: 
    if isinstance(each_item , list): 
    for nested_item in each_item: 
     if isinstance(nested_item , list): 
     for each_d in nested_item: print(each_d) 
     else: print(nested_item) 
    else: print(each_item) 
+0

为什么名称错误来nested_item ????? –

+1

A ['NameError'](http://docs.python.org/library/exceptions.html#exceptions.NameError)表示该对象不存在。在你的例子中,在第11行中,在else中,你试图在甚至定义它之前打印nested_item(它只在for循环中定义)。 –

+0

@sumitkumarraj你会得到这个错误,因为由于缩进,输出nested_item的'else'语句与'if isinstance'语句相关联,此时,nested_item尚未定义。 – BenH

0

您将不得不更好地格式化您的示例,并且您可能会在此过程中解决您的问题。因为else:可以跟在if和'for`之后,所以可以根据它的缩进方式对代码进行不同的解释。

for each_item in movies: 
    if isinstance(each_item , list): 
     for nested_item in each_item: 
      if isinstance(nested_item , list): 
       for each_d in nested_item: 
        print(each_d) 
      else: 
       print(nested_item) 
    else: 
     print(each_item) 

与:

for each_item in movies: 
    if isinstance(each_item , list): 
     for nested_item in each_item: 
      if isinstance(nested_item , list): 
       for each_d in nested_item: 
        print(each_d) 
       else: 
        print(nested_item) 
     else: 
      print(each_item) 

还有其他的可能性也是如此。这两种方法对我都有效,并产生不同的结果。

同时,如果我理解你的意图,你可能会想这样做以下代替:

def iterate_recursive(l): 
    for item in l: 
     if isinstance(item, list): 
      for nested_item in iterate_recursive(item): 
       yield nested_item 
     else: 
      yield item 

for item in iterate_recursive(movies): 
    print item 

,输出:

the holy grail 
1975 
terry jones & Terry gilliam 
91 
gilliam chapman 
michael palin 
john cleese 
terry gilliam 
eric idle 
terry jones 
+0

然后如何做缩进如果我想打印整个数组。 –

+0

你在IDLE中运行这个吗? –

+0

嘿...谢谢你们,我知道了....我的缩进是错误的。我得到了纠正thanx为你的帮助.. –

0

尝试用空格替换所有选项卡(如果有的话)。这将使缩进更清楚。

0

这里的另一种方式,以减少你的嵌套列表到一个平面列表,并应在各级工作:

def reduce_recursive(x, y): 
    if isinstance(y, list): 
     return x+reduce(reduce_recursive, y, []) 
    return x+[y] 

for item in reduce(reduce_recursive, movies, []): 
    print item 
+0

嘿...谢谢你们,我知道了....我的缩进是错误的,我已经把它改正为thanx for ur help ...... –