Python Mypy属性错误

时间:2017-05-17 09:20:50

标签: python mypy

我有一个python3.4项目,最近我决定使用mypy来更好地理解。

这段代码可以正常工作,但是用mypy检查会弹出一个错误:

import zipfile

def zip_to_txt(zip: typing.IO[bytes]) -> BytesIO:
zz = zipfile.ZipFile(zip)
output = BytesIO()
for line, info in enumerate(zz.filelist):
    date = "%d-%02d-%02d %02d:%02d:%02d" % info.date_time[:6]
    output.write(str.encode("%-46s %s %12d\n" % (info.filename, date, info.file_size)))
output.seek(0, 0)
return output

错误:

PyPreviewGenerator/file_converter.py:170: error: "ZipFile" has no attribute "filelist"(对应此行:for line, info in enumerate(zz.filelist):

但是当我查看ZipFile类时,我可以清楚地看到该属性存在。
那么为什么会出现错误呢?有没有办法解决它?

1 个答案:

答案 0 :(得分:2)

简而言之,原因是因为未在Typeshed中记录filelist属性,这是stdlib /各种第三方库的类型存根的集合。您可以自己查看here

为什么不包括filelist?好吧,因为它实际上看起来并不是documented part of the API。如果您搜索文档,则会看到filelist未在任何地方提及。

相反,你应该调用infolist() method,它会准确地返回你想要的内容(如果你很好奇,请参阅implementation here)。您会注意到infolist() 确实是 listed within typeshed