None
in Python ist ein Objekt.
Und als solche kann es Funktionen wie __str __ ()
verwenden %Vor%Aber warum macht es nicht dasselbe für __len __ ()?
%Vor% Es scheint, als wäre Pythonic genau so, wie if list
auch dann akzeptabel ist, wenn die Variable None
ist und nicht nur eine leere Liste.
Gibt es Fälle, die die Verwendung von len(None)
eher zu einem Problem machen würden?
Sie erwähnen, dass Sie das wollen:
, weil es oft als Fehler angezeigt wird, wenn eine Funktion
None
anstelle einer Liste zurückgibt
Vermutlich haben Sie einen Code wie:
%Vor%und bekommen:
%Vor%Beachten Sie Folgendes:
len
dient zur Bestimmung der Länge von Sammlungen (zB a list
, dict
oder str
- das sind Sized
Objekte). Es ist nicht , um beliebige Objekte in Ganzzahlen umzuwandeln - es ist auch nicht implementiert für int
oder bool
, zum Beispiel; None
eine Möglichkeit ist, sollten Sie if list_probably is not None
explizit testen. Verwenden von z.B. if list_probably
würde None
und die leere Liste []
gleich behandeln, was wahrscheinlich nicht das richtige Verhalten ist. und range(len(...))
- z. for item in list_probably
, mit zip
, etc. Die Implementierung von len
für None
würde nur Fehler ausblenden wo None
falsch behandelt wird, wie bei einem anderen Objekt - pro das Zen von Python ( import this
):
Fehler sollten niemals stillschweigend passieren.
Auf ähnliche Weise würde for item in None
fehlschlagen, aber das bedeutet nicht, dass die Implementierung von None.__iter__
eine gute Idee ist! Fehler sind eine gute Sache - sie helfen Ihnen, die Probleme in Ihren Programmen schnell zu finden.