gpt4 book ai didi

python - mypy 声明 IO[bytes] 与 BinaryIO 不兼容

转载 作者:行者123 更新时间:2023-12-03 14:22:27 26 4
gpt4 key购买 nike

考虑以下代码:

from io      import TextIOWrapper
from typing import List
from zipfile import ZipFile

def read_zip_lines(zippath: str, filename: str) -> List[str]:
with ZipFile(zippath) as zf:
with zf.open(filename) as bfp:
with TextIOWrapper(bfp, 'utf-8') as fp:
return fp.readlines()
在 Python 3.6.9 下对上述代码运行 mypy v0.782 失败,并出现以下错误:
zfopen.py:8: error: Argument 1 to "TextIOWrapper" has incompatible type "IO[bytes]"; expected "BinaryIO"
但是,我觉得这段代码不应该被视为错误,如 ZipFile.open()返回一个二进制文件句柄, TextIOWrapper接受。此外, IO[bytes]BinaryIO (据我所知)实际上是同一件事;只是 BinaryIO被声明为 IO[bytes] 的子类.我会天真地期待 IO[bytes]被接受的任何地方 BinaryIO是,除了子类不是这样工作的,我不确定在打字时如何正确使用这个子类。
谁在这里犯了错误,错误是如何解决的?
  • 为声明 ZipFile.open() 的返回类型而输入错误如IO[bytes]而不是 BinaryIO ?
  • 将第一个参数的类型声明为 TextIOWrapper 时排版错误如BinaryIO而不是 IO[bytes] ?
  • typing制作模块出错 BinaryIO IO[bytes] 的子类而不是别名?
  • 我的代码是否因未在 bfp 上执行某种类型的转换而出错? ?
  • 我期望 bfp 的想法是错误的吗?可以通过TextIOWrapper未修改?
  • 最佳答案

    这个使用 mypy 0.782 的较短测试用例得到相同的错误:

        binary_file = io.open('foo.bin', 'rb')
    text_file = io.TextIOWrapper(binary_file, encoding='utf-8', newline='')
    是否 binary_file显式声明为 IO[bytes]或推断。
    修复:使用 mypy 0.770mypy 0.790 .
    这是 mypy 的排版 ( Issue 4349) 中的回归,修复在 mypy 0.790 中,同时修复了 zipfile.open()io.open() .

    关于python - mypy 声明 IO[bytes] 与 BinaryIO 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62745734/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com