2014-03-02 22 views
4

我試圖使該移動所有的.txt文件在您的桌面臺式機/組織的腳本,代碼如下:AttributeError的:「模塊」對象有沒有屬性「[X]」

import os 
import shutil 

userhome = os.path.expanduser('~') 
src = userhome + '/Desktop/' 
dst = src+ 'org/' 

def main(): 
    txtlist = os.listdir(src) 
    for file in txtlist: 
     sortFiles(file) 

def sortFiles(file):   
     if file.endswith(".txt"): 
      shutil.move(src+file,dst) 


main() 

如果我執行.py我得到這個錯誤:AttributeError:'模塊'對象沒有屬性'複製'。但是,如果我刪除最後一行「main()」,並將該腳本作爲模塊導入到python命令行中,並從那裏調用.main(),那麼它工作得很好。我怎樣才能使這項工作作爲腳本

Traceback (most recent call last): 
    File "C:\Python32\org.py", line 3, in <module> 
    import shutil 
    File "C:\Python32\lib\shutil.py", line 14, in <module> 
    import tarfile 
    File "C:\Python32\lib\tarfile.py", line 50, in <module> 
    import copy 
    File "C:\Python32\lib\copy.py", line 61, in <module> 
    from org.python.core import PyStringMap 
    File "C:\Python32\org.py", line 19, in <module> 
    main() 
    File "C:\Python32\org.py", line 12, in main 
    sortFiles(file) 
    File "C:\Python32\org.py", line 16, in sortFiles 
    shutil.move(src+file,dst) 
AttributeError: 'module' object has no attribute 'move' 

我使用Python 3.2

+0

你可以發佈錯誤的完整堆棧跟蹤嗎? – poke

+0

這段代碼在Python 2.7下的Mac上正常工作。我假設你從其他程序中調用'main()',因爲沒有'.move()'。 – holdenweb

+0

這在CentOS中適用於我,只要你有目錄! –

回答

12

哇,這是一些壞運氣。你能理解這是怎麼回事,當你在回溯上:

Traceback (most recent call last): 
    File "C:\Python32\org.py", line 3, in <module> 
    import shutil 

所以,正在執行的第一行是import shutil。這就是一切都開始出現問題的地方 - 鑑於它是一個內置模塊,令人驚訝。

File "C:\Python32\lib\shutil.py", line 14, in <module> 
    import tarfile 
    File "C:\Python32\lib\tarfile.py", line 50, in <module 
    import copy 

所以shutil進口tarfile,其中進口copy

File "C:\Python32\lib\copy.py", line 61, in <module> 
    from org.python.core import PyStringMap 

而且copy有試圖從一個叫做org.python.core模塊導入PyStringMap這個漂亮的東西。現在,這個模塊通常不存在,這會導致copy使用一些替代代碼:PyStringMap = None

問題是,有東西叫org:你自己的腳本,org.py。那麼Python會試圖在org.py中找到一個叫python.core.PyStringMap的東西。爲了能夠走那麼遠,它需要執行腳本,包括在年底main()電話:

File "C:\Python32\org.py", line 19, in <module> 
    main() 
    File "C:\Python32\org.py", line 12, in main 
    sortFiles(file) 
    File "C:\Python32\org.py", line 16, in sortFiles 
    shutil.copy(src+file,dst) 
AttributeError: 'module' object has no attribute 'copy' 

這使我們的shutil.copy線,是對shutil模塊的調用。由於這是我們仍在導入的模塊(從第一行開始!),它的導入尚未完全導入,所以copy裏面的函數不存在,導致AttributeError

這是一個非常不幸的情況,其中腳本的命名會導致不存在的事件的循環導入。

您可以通過將腳本重命名爲其他內容來輕鬆解決此問題。

+0

我還建議將org.py腳本移出python32目錄。只有來自實際分佈的代碼應該在這個目錄中。 –

相關問題