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.

2
e1i45 10 Okt. 2012 im 13:15

4 Antworten

Beste Antwort

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.

2
Rorchackh 10 Okt. 2012 im 09:19

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 .

2
defuz 10 Okt. 2012 im 09:29

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.

2
Martijn Pieters 10 Okt. 2012 im 09:16

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.

2
Fred Foo 10 Okt. 2012 im 09:18