¿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.TextIO
o typing.BinaryIO
, para archivos abiertos en modo texto o en modo binario, respectivamente.
De los documentos :
clase
typing.IO
Espacio de nombres de contenedor para tipos de flujo de E / S.
Esto define el tipo genérico
IO[AnyStr]
y los aliasTextIO
yBinaryIO
para 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 TextIO
no es justo from typing import *
.IO
para referirse a un archivo sin especificar de qué tipoTextIO
o BinaryIO
si 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