【发布时间】:2016-11-28 21:25:53
【问题描述】:
是否有任何正确的类型提示可用于 Python 中的文件或类似文件的对象?例如,我将如何对这个函数的返回值进行类型提示?
def foo() -> ???:
return open('bar')
【问题讨论】:
标签: python type-hinting
是否有任何正确的类型提示可用于 Python 中的文件或类似文件的对象?例如,我将如何对这个函数的返回值进行类型提示?
def foo() -> ???:
return open('bar')
【问题讨论】:
标签: python type-hinting
对以文本模式或二进制模式打开的文件分别使用typing.TextIO 或typing.BinaryIO 类型。
来自the docs:
类
typing.IOI/O 流类型的包装命名空间。
这定义了泛型类型
IO[AnyStr]和别名TextIO和BinaryIO分别为IO[str]和IO[bytes]。这些代表 I/O 流的类型,例如由open()返回。
【讨论】:
def f() -> IO: return open('test') 在 PyCharm 中给出了“预期类型 'IO',得到了 'TextIOWrapper[str]'”。
typing.io 是要弃用的命名空间,因为typing.io.BinaryIO 和其他名称也存在并且大多直接从typing 命名空间使用,例如typing.BinaryIO .
简短的回答:
from typing import TextIO 而不仅仅是from typing import *。IO 表示文件而不指定类型TextIO 或BinaryIO
举个例子:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
给出Expected type 'BinaryIO', got 'TextIO' instead 的检查错误(在 PyCharm 中)
【讨论】: