2017-05-17 11 views
3

私はpython3.4プロジェクトを持っていますが、私は最近mypyを理解しやすくすることにしました。Python 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クラス、私は明らかにその属性が存在することがわかります。
なぜエラーが発生しますか?私はそれを解決する方法がありますか?

答えて

2

簡潔に言えば、filelist属性は、stdlib /さまざまなサードパーティライブラリ用のスタブのコレクションであるTypeshed内には記載されていないからです。あなたはこれを自分で見ることができますhere

なぜfilelistは含まれていませんか?実際にはdocumented part of the APIであるとは思われないためです。文書を検索すると、filelistはどこにも記載されていません。

代わりにinfolist() methodに電話する必要があります。好きなものが返されます(好奇心が強い場合はimplementation hereを参照)。 infolist()、実際はlisted within typeshedです。

+0

ありがとう、私はそれがmypyで動作するように文書化されているので、使用する必要があることを知らなかった。 – Herawo

関連する問題