2014-09-03 158 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

相关问题