二进制文件类对象的正确类型

时间:2017-08-18 22:13:13

标签: python-3.x file binary pycharm type-hinting

我使用Python类型提示定义了以下函数:

from typing import BinaryIO

def do_something(filename: str):
    my_file = open(filename, "rb")
    read_data(my_file)

def read_data(some_binary_readable_thing: BinaryIO):
    pass

但是我的IDE(PyCharm 2017.2)在我调用read_file的行上给出了以下警告:

Expected type 'BinaryIO', got 'FileIO[bytes]' instead

我在这里使用的正确类型是什么? PEP484BinaryIO定义为“IO[bytes]的简单子类型”。 FileIO不符合IO吗?

1 个答案:

答案 0 :(得分:0)

这看起来像是Pycharm或typing模块中的错误。来自typing.py模块:

class BinaryIO(IO[bytes]):
    """Typed version of the return of open() in binary mode."""
    ...

此外documentation指定:

  

这些代表I / O流的类型,例如open()返回。

所以应该按照规定工作。目前,解决方法是明确使用FileIO

from io import FileIO

def do_something(filename: str):
    my_file = open(filename, "rb")
    read_data(my_file)

def read_data(some_binary_readable_thing: FileIO[bytes]):
    pass