2014-03-25 59 views
0

在源代碼中需要什麼樣的變化?python3類型錯誤:「功能」對象不是可迭代

 

    def Update(): 
     print('\n') 
     print("Update") 
     cmd = os.system('xterm -e apt-get update') 
     print("Finish update") 

    def AptUpdate(): 
     print('\n') 
     print("Update system? {Y/N}") 
     print("Y or y") 
     print("N or n") 
     code = input("Command > ") 
     if code == 'y' or code == 'Y': 
      for i in Update(): 
       return Update 
      elif code == 'n' or code == 'N': 
       return 
      else: 
       print("Warning!") 

    AptUpdate() 

    exception: 

    Traceback (most recent call last): 
     File "pybash.py", line 110, in 
     AptUpdate() 
     File "pybash.py", line 102, in AptUpdate 
     for i in Update: 
    TypeError: 'function' object is not iterable 

+1

你的回溯和實際的代碼不匹配。問題就出在這兩個。 –

+4

之間準確的區別你的下一個錯誤將是''NoneType '對象不可迭代',因爲'Updt'實際上不會返回任何東西有用的東西。 –

+1

你應該讀作[Python中的回報與印刷之間的區別是什麼?(http://stackoverflow.com/q/3881434/4279)和[Python的:什麼是打印和收益之間的形式上的差別(HTTP:// stackoverflow.com/q/7664779/4279) – jfs

回答

4

什麼追蹤誤差指出的是對聲明的濫用:

for i in Updt():

for在Python 3如下:「Python的for語句依據任意序列的項目(一個列表或一個字符串),按順序出現在序列中。「 (來源:蟒蛇3.3文檔,第4節:更多的控制結構Python 3

由於功能既不是列表也不是一個字符串,你不能使用格式:

for [variable] in [function]():

至於什麼需要固定,要看是什麼這兩個功能都應該獨立完成。

+1

如果該函數返回一個可迭代型,那麼這可以被使用。他的問題是,在他的實際代碼中(基於錯誤),他從不調用函數,而是試圖迭代函數本身的引用。 –

+0

這是真的,我想給塊的目的是迷惑我,因爲我沒有做一大堆的shell腳本。 – user3460822

+0

我忘了把()放在函數調用的最後,所以Python拋出了相同的錯誤。 '路由= db.get_all_routes'(換行) '用於路線路線:'應該是'路由= db.get_all_routes()'(換行) '用於路線路線:' –

相關問題