Python对象找不到属性错误

0 投票
3 回答
1173 浏览
提问于 2025-04-19 16:54

我有一个文件叫做 parser.py

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 目录下并运行时,我没有发现任何问题。有没有人能告诉我这是怎么回事?

3 个回答

-1

正确设置你的PYTHONPATH:

export PYTHONPATH=/some/path:/some/path/lib
1

首先,确保你的lib目录里有一个__init__.py文件。然后你可以在driver.py文件中这样导入Parser类:

from lib.parser import Parser

这个__init__.py文件的作用是告诉Python解释器,这个目录应该被当作一个Python模块来处理(https://docs.python.org/2/tutorial/modules.html)。

1

有一个内置的Python模块叫做 parser,这个模块会被优先导入,而不是你自己写的模块。最好的解决办法是不要把你的模块命名为这个名字,或者如果你真的想用这个名字,就把它放在一个包里面,这样就不会直接在顶层导入它了(也就是说,你应该用 import mypackage.parser 而不是 import parser)。

撰写回答