Type hint for a file or file-like object?
PythonType HintingPython Problem Overview
Is there any correct type hint to use for a file or file-like object in Python? For example, how would I type-hint the return value of this function?
def foo() -> ???:
return open('bar')
Python Solutions
Solution 1 - Python
Use either the typing.TextIO
or typing.BinaryIO
types, for files opened in text mode or binary mode respectively.
From the docs:
> ### class typing.IO
>
> Wrapper namespace for I/O stream types.
>
> This defines the generic type IO[AnyStr]
and aliases TextIO
and BinaryIO
for respectively IO[str]
and IO[bytes]
. These representing the types of I/O streams such as returned by open()
.
Solution 2 - Python
The short answer:
- You need to be explicit. That is
from typing import TextIO
not justfrom typing import *
. - Use
IO
to mean a file without specifying what kind - Use
TextIO
orBinaryIO
if you know the type - You cannot currently specify it be opened for write or its encoding.
As an example:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
gives an inspection error (in PyCharm) of Expected type 'BinaryIO', got 'TextIO' instead