¿Hay alguna sugerencia de tipo correcto para usar para un archivo o un objeto similar a un archivo en Python? Por ejemplo, ¿cómo escribiría-insinuaría el valor de retorno de esta función?
def foo():
return open('bar')
¿Hay alguna sugerencia de tipo correcto para usar para un archivo o un objeto similar a un archivo en Python? Por ejemplo, ¿cómo escribiría-insinuaría el valor de retorno de esta función?
def foo():
return open('bar')
Respuestas:
Utilice los tipos typing.TextIOo typing.BinaryIO, para archivos abiertos en modo texto o en modo binario, respectivamente.
De los documentos :
clase
typing.IOEspacio de nombres de contenedor para tipos de flujo de E / S.
Esto define el tipo genérico
IO[AnyStr]y los aliasTextIOyBinaryIOpara respectivamenteIO[str]yIO[bytes]. Estos representan los tipos de flujos de E / S como los devueltos poropen().
def f() -> IO: return open('test')da "Tipo esperado 'IO', obtuvo 'TextIOWrapper [str]' en su lugar" en PyCharm.
IO[str]?
La respuesta corta:
from typing import TextIOno es justo from typing import *.IOpara referirse a un archivo sin especificar de qué tipoTextIOo BinaryIOsi conoce el tipoComo ejemplo:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
da un error de inspección (en PyCharm) de Expected type 'BinaryIO', got 'TextIO' instead