在Python中,对于文件或类文件对象是否有正确的类型提示?例如,我将如何键入提示这个函数的返回值?

def foo() -> ???:
    return open('bar')

当前回答

使用打字中的任何一种。TextIO或打字。BinaryIO类型,分别用于以文本模式或二进制模式打开的文件。

从文档中可以看出:

类类型。IO I/O流类型的包装器名称空间。 这定义了泛型类型IO[AnyStr]和别名TextIO和BinaryIO分别为IO[str]和IO[bytes]。这些表示I/O流的类型,例如open()返回的流。

其他回答

简单的回答是:

你需要明确。这是通过输入import TextIO,而不仅仅是输入import *。 使用IO表示不指定类型的文件 如果知道类型,可以使用TextIO或BinaryIO 当前不能指定打开该文件进行写入或其编码。

举个例子:

from typing import BinaryIO

def binf(inf: BinaryIO):
    pass

with open('x') as f:
    binf(f)

给出一个检查错误(在PyCharm中)的预期类型'BinaryIO',得到'TextIO'代替

使用打字中的任何一种。TextIO或打字。BinaryIO类型,分别用于以文本模式或二进制模式打开的文件。

从文档中可以看出:

类类型。IO I/O流类型的包装器名称空间。 这定义了泛型类型IO[AnyStr]和别名TextIO和BinaryIO分别为IO[str]和IO[bytes]。这些表示I/O流的类型,例如open()返回的流。