Python 程序 Attribute:Error 模块 'reader' 没有属性 'Reader'
Python program Attribute:Error module 'reader' has no attribute 'Reader'
我正在尝试在 C:\reader\compressed\ 中测试 运行 我的程序,我在其中创建了两个测试文件 'test.gzip' 和 'test.bz2' 但是当我去 运行 Reader class 我知道模块 reader 没有属性 'Reader'.
我打开 python 到 "import reader" 然后 "r = reader.Reader('test.bz2')"
目录看起来像:
我可以导入我创建的所有模块。
import reader
import reader.compressed
import reader.compressed.gzipped
import reader.compressed.bzipped
这是我的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()
我检查了我的模块,看看它们是否与新文件一起存在,以便测试应该 return 消息。
>>> import reader
>>> r= reader.reader.Reader('test.gz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'reader' has no attribute 'reader'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Develop\Python\reader\__init__.py", line 13, in
__init__
self.f = opener(filename, 'rt')
File"C:\Python\Python36\lib\gzip.py", line 53, in open
binary_file = GzipFile(filename, gz_mode, compresslevel)
File
"C:\Programs\Python\Python36\lib\gzip.py", line 163, in
__init__
fileobj = self.myfileobj = builtins.open(filename, mode or
'rb')
FileNotFoundError: [Errno 2] No such file or directory:
'test.gz'
您的文件名不应与标准模块名相同。因此,将 reader.py
重命名为 reader1.py
左右。
Reader
class 未在顶级 reader
模块中定义。相反,它是在 reader.reader
中定义的,因为顶层 reader
是一个包。
如果导致错误的当前代码是:
import reader
r= reader.Reader('test.gzip')
您需要将其更改为使用 reader.reader
而不仅仅是 reader
:
import reader.reader
r = reader.reader.Reader('test.gzip')
或者,您可以将 reader/reader.py
的内容移动到 reader/__init__.py
,因为后一个文件是定义 reader
包内容的地方。或者你可以分开差异,并保留 reader.py
文件,同时仍然使 class 在包级别可用,在 __init__.py
中使用类似的东西(注意我没有测试过这个,那里是一些从 __init__.py
文件中相对导入的奇怪极端情况):
from .reader import Reader
我正在尝试在 C:\reader\compressed\ 中测试 运行 我的程序,我在其中创建了两个测试文件 'test.gzip' 和 'test.bz2' 但是当我去 运行 Reader class 我知道模块 reader 没有属性 'Reader'.
我打开 python 到 "import reader" 然后 "r = reader.Reader('test.bz2')"
目录看起来像:
我可以导入我创建的所有模块。
import reader
import reader.compressed
import reader.compressed.gzipped
import reader.compressed.bzipped
这是我的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()
我检查了我的模块,看看它们是否与新文件一起存在,以便测试应该 return 消息。
>>> import reader
>>> r= reader.reader.Reader('test.gz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'reader' has no attribute 'reader'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Develop\Python\reader\__init__.py", line 13, in
__init__
self.f = opener(filename, 'rt')
File"C:\Python\Python36\lib\gzip.py", line 53, in open
binary_file = GzipFile(filename, gz_mode, compresslevel)
File
"C:\Programs\Python\Python36\lib\gzip.py", line 163, in
__init__
fileobj = self.myfileobj = builtins.open(filename, mode or
'rb')
FileNotFoundError: [Errno 2] No such file or directory:
'test.gz'
您的文件名不应与标准模块名相同。因此,将 reader.py
重命名为 reader1.py
左右。
Reader
class 未在顶级 reader
模块中定义。相反,它是在 reader.reader
中定义的,因为顶层 reader
是一个包。
如果导致错误的当前代码是:
import reader
r= reader.Reader('test.gzip')
您需要将其更改为使用 reader.reader
而不仅仅是 reader
:
import reader.reader
r = reader.reader.Reader('test.gzip')
或者,您可以将 reader/reader.py
的内容移动到 reader/__init__.py
,因为后一个文件是定义 reader
包内容的地方。或者你可以分开差异,并保留 reader.py
文件,同时仍然使 class 在包级别可用,在 __init__.py
中使用类似的东西(注意我没有测试过这个,那里是一些从 __init__.py
文件中相对导入的奇怪极端情况):
from .reader import Reader