文件或类文件对象的类型提示?

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

def foo() -> ???:
return open('bar')
76221 次浏览

对于以文本模式或二进制模式打开的文件,分别使用typing.TextIOtyping.BinaryIO类型。

的文档:

typing.IO

I/O流类型的包装器名称空间。

这定义了泛型类型IO[AnyStr]和别名TextIOBinaryIO分别为IO[str]IO[bytes]。这些表示I/O流的类型,如open()返回的。

简单的回答是:

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

举个例子:

from typing import BinaryIO


def binf(inf: BinaryIO):
pass


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

给出Expected type 'BinaryIO', got 'TextIO' instead的检查错误(在PyCharm中)