2014-09-03 124 views
0

我有一個文件parser.pyPython對象找不到屬性錯誤

class Parser: 
    ... 
    ... 

    @staticmethod 
    def someMethod(): 
     Parser.argsParser.someNewMethod() 

和文件worker.py

import connection, parser 
... 
... 

class Worker: 
    def __init__(self): 
     try: 
      parsed = parser.Parser() 

和文件driver.py:

sys.path.append('./lib') 
import worker, parser 

parser.Parser.someMethod() 

現在我的目錄結構是

/some/path/driver.py 
/some/path/lib/worker.py 
/some/path/lib/parser.py 

當我運行driver.py我得到:

Traceback (most recent call last): 
    File "./lib/worker.py", line 13, in __init__ 
    parsed = parser.Parser() 
AttributeError: 'module' object has no attribute 'Parser' 
'module' object has no attribute 'Parser' 

然而,當我複製到driver.py和./lib運行,我沒有發現任何問題。任何人都可以指出我到底發生了什麼?

回答

1

有一個叫parser一個內置的Python模塊,它是正在進口的,而不是你的模塊。最好的辦法是不要命名您的模塊,或者,如果你這樣做,把它放在包內,所以你不要導入它直接在頂層(即,讓你做import mypackage.parser,而不是import parser)。

-1

正確設置你的PYTHONPATH:

export PYTHONPATH=/some/path:/some/path/lib 
+0

我認爲它與路徑無關,問題是無法找到類「Parser」而不是文件「parser.py」 – 2014-09-03 22:09:37

1

首先確保你的lib目錄中有一個__init__.py文件。然後你就可以在你的driver.py文件導入解析器類,如下所示:

from lib.parser import Parser 

__init__.py文件讓Python解釋器知道該目錄被認爲是一個Python模塊(https://docs.python.org/2/tutorial/modules.html)。

+0

謝謝!此澄清一些__init__.py的用法,但是我不得不接受對方的回答,因爲它是更準確的問題:) – 2014-09-03 22:22:37

相關問題