键入文件或类文件对象的提示?

时间:2016-07-25 13:42:50

标签: python type-hinting

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

def foo():
    return open('bar')

3 个答案:

答案 0 :(得分:43)

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

来自the docs

  

class typing.io

     

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

     

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

答案 1 :(得分:1)

简短答案:

  • 您需要明确。那就是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表示)

答案 2 :(得分:-2)

您可以分别对文本文件和二进制文件使用TextIO和BinaryIO。