我正在学习一门在线python课程,有一个问题我很难解决。我有一个如下布局的可执行目录
reader/
|--__main__.py
|--reader
|--__init__.py
|--reader.py
|--compressed
|--gzipped.py
|--bzipped.py
|--__init__.py
当我在顶层目录中没有这些模块时,我可以很好地导入并使用所有的功能。当我把它们放在顶层目录中,并用
python reader test.gz
我得到以下错误
AttributeError: module 'reader' has not attribute 'Reader'
main.py的代码是
import sys
import reader
r = reader.Reader(sys.argv[1])
try:
print(r.read())
finally:
r.close()
reader.py的代码是
import os
from reader.compressed import gzipped, bzipped
extension_map = {
'.bz2': bzipped.opener,
'.gz': gzipped.opener,
}
class Reader:
def __init__(self, filename):
extension = os.path.splitext(filename)[1]
opener = extension_map.get(extension, open)
self.f = opener(filename, 'rt')
def close(self):
self.f.close()
def read(self):
return self.f.read()
如果需要,我可以提供其余的文件。我用的是目前的Python分布。任何帮助或解释都将不胜感激
当您有多个名称相同的模块/模块时,通常可以将名称空间放入递归循环中。另外,Reader类是大写的
如上所述,尝试python reader.reader test.gz
在进行故障排除时,请尝试tab complete功能,以查看模块是否正确加载
在我看来,由于您的
__init__.py
文件,文件夹reader
被视为python模块。因此,您的main.py
代码尝试在文件夹级别查找类Reader
,但您需要在reader.py
中查找Reader
。你能试着换衣服吗r = reader.Reader(sys.argv[1])
至
r = reader.reader.Reader(sys.argv[1])
此外,还有许多名为reader的模块/文件/模块,例如类
Reader
位于reader/reader/reader.py
。我会尽量避免这种情况,因为它会导致混乱相关问题 更多 >
编程相关推荐