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.TextIO
oder typing.BinaryIO
für Dateien, die im Textmodus bzw. im Binärmodus geöffnet wurden.
Aus den Dokumenten :
Klasse
typing.IO
Wrapper-Namespace für E / A-Stream-Typen.
Dies definiert die generische Art
IO[AnyStr]
und AliaseTextIO
undBinaryIO
fü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 TextIO
nicht nur so from typing import *
.IO
diese Option, um eine Datei zu bezeichnen, ohne anzugeben, welche ArtTextIO
oder BinaryIO
wenn 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