我使用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
我在这里使用的正确类型是什么? PEP484将BinaryIO
定义为“IO[bytes]
的简单子类型”。 FileIO
不符合IO
吗?
答案 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