2017-08-18 78 views
4

正確的類型我一直在使用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

回答

0

這看起來像是Pycharm或typing模塊中的一個錯誤。從typing.py模塊:

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

另外,documentation指定:

這些代表各類型的I/O數據流的諸如通過打開()返回。

所以它應該工作如上所述。目前,解決方法是明確使用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