Gibt es eine Möglichkeit, eine Ausnahme zu erhalten, wenn der Operator == (gleich) zum Vergleichen verschiedener Typen verwendet wird? Python 3 löst eine Ausnahme aus, wenn versucht wird, Objekte unterschiedlichen Typs zu bestellen. Aber == gibt immer noch False zurück.
Oder gibt es eine andere Möglichkeit, um schwer zu erkennende Fehler zu vermeiden, die durch falsche Typannahmen verursacht werden? Gibt es Designmuster, die helfen könnten?
Ich denke beispielsweise an einen Fall, in dem jemand eine andere Implementierung von xmlparser.get () verwendet, die immer eine Zeichenfolge zurückgibt, selbst wenn die Eigenschaft im Grunde eine Zahl ist.
4 Antworten
Nein. Denn für == lautet die Begründung, dass Gleichheit Vergleichbarkeit impliziert. Wenn zwei Objekte nicht einmal vergleichbar sind, sind sie nicht gleich, daher wird false zurückgegeben und es wird niemals eine Ausnahme ausgelöst.
Trotz der Tatsache, dass Python dynamisch tippt, ist es stark (keine Ente). So:
>>> 42 == 42
True
>>> 42 == 42.0
True
>>> 42 == "42"
False
>>> 42 == int("42")
True
Sie müssen eine explizite Typkonvertierung durchführen, wenn Sie eine Zeichenfolgendarstellung der Nummer erhalten.
Auf der anderen Seite können Sie den Vergleich Ihrer benutzerdefinierten Objekte verwalten, indem Sie Methoden {{X0 }} oder __cmp__(self, other)
in Ihrer Klasse .
Nein, Python ist von Natur aus dynamisch typisiert.
Wenn Sie einen Typ überprüfen müssen, verwenden Sie isinstance()
Funktion oder verwenden Sie Ententypisierung, um das spezifische Verhalten zu testen.
Ich denke beispielsweise an einen Fall, in dem jemand eine andere Implementierung von xmlparser.get () verwendet, die immer eine Zeichenfolge zurückgibt, selbst wenn die Eigenschaft im Grunde eine Zahl ist.
Möglicherweise möchten Sie den Wert zu einer Zahl zwingen, indem Sie je nach Bedarf int
oder float
darauf aufrufen.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.