Gibt es einen korrekten Typhinweis für eine Datei oder ein dateiähnliches Objekt in Python? Wie würde ich beispielsweise den Rückgabewert dieser Funktion tippen?
def foo():
return open('bar')
Gibt es einen korrekten Typhinweis für eine Datei oder ein dateiähnliches Objekt in Python? Wie würde ich beispielsweise den Rückgabewert dieser Funktion tippen?
def foo():
return open('bar')
Antworten:
Verwenden Sie entweder die Typen typing.TextIOoder typing.BinaryIOfür Dateien, die im Textmodus bzw. im Binärmodus geöffnet wurden.
Aus den Dokumenten :
Klasse
typing.IOWrapper-Namespace für E / A-Stream-Typen.
Dies definiert die generische Art
IO[AnyStr]und AliaseTextIOundBinaryIOfür jeweilsIO[str]undIO[bytes]. Diese repräsentieren die Arten von E / A-Streams, wie sie von zurückgegeben werdenopen().
def f() -> IO: return open('test')Gibt in PyCharm "Erwarteter Typ 'IO', stattdessen 'TextIOWrapper [str]'" an.
IO[str]?
Die kurze Antwort:
from typing import TextIOnicht nur so from typing import *.IOdiese Option, um eine Datei zu bezeichnen, ohne anzugeben, welche ArtTextIOoder BinaryIOwenn Sie den Typ kennenAls Beispiel:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
gibt einen Inspektionsfehler (in PyCharm) von aus Expected type 'BinaryIO', got 'TextIO' instead