2011-10-28 131 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 ...... –