Python对象找不到属性错误
问题描述:
我有一个文件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运行,我没有发现任何问题。任何人都可以指出我到底发生了什么?
答
有一个叫parser
一个内置的Python模块,它是正在进口的,而不是你的模块。最好的办法是不要命名您的模块,或者,如果你这样做,把它放在包内,所以你不要导入它直接在顶层(即,让你做import mypackage.parser
,而不是import parser
)。
答
正确设置你的PYTHONPATH:
export PYTHONPATH=/some/path:/some/path/lib
答
首先确保你的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
我认为它与路径无关,问题是无法找到类“Parser”而不是文件“parser.py” – 2014-09-03 22:09:37