Problem mit isinstance

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Hallo liebe Python-Gemeinde,

Um einen Text in ein Float umzuwandeln, will ich sicherstellen, dass bevor ich es umwandel, der String auch wirklich in ein Float umgewandelt werden kann.

Also mache ich:

Code: Alles auswählen

>>> x = "1212.56"
>>> isinstance(float(x),float)
True
Dürfte anzunehmen sein, dass wenn mein Wert float(x) KEINE gülte Zahl ist, ich ein False ausgegeben bekomme. Passiert aber nicht:

Code: Alles auswählen

>>> isinstance(float("Hallo"),float)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in -toplevel-
    isinstance(float("Hallo"),float)
ValueError: invalid literal for float(): Hallo
Wie kommt dies zustande? Gibt es eine andere Möglichkeit, einen String zu checken? Oder bleibt mit dann nur die Möglichkeit mit try ... except...?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Der Aufruf float(x) versucht doch schon, die Zahl in einen Float umzuwandeln. Wenn das nicht funktioniert, wird natürlich eine Exception geschmissen. In Python ist das Auwerten der Exception genau die richtige Lösung.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

meneliel hat geschrieben:Hallo liebe Python-Gemeinde,

Um einen Text in ein Float umzuwandeln, will ich sicherstellen, dass bevor ich es umwandel, der String auch wirklich in ein Float umgewandelt werden kann.
Stopp! Denk noch mal über folgende Aussage nach:
"... bevor ich es umwandel ..."
und dann guck Dir das an:

Code: Alles auswählen

isinstance(float(x),float)
Nun klar? ;-)

Edit: Mist! Zu spät :D
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

>>> isinstance("1234.23",float)
False


Na dass mir der Ausdruck ein False ausgibt, war mir klar, aber es SOLL ja ein String umgewandelt werden in ein Float. Ich dachte, ich könnte das so irgendwie checken. Aber dann mach ich es mit nem try except... danke euch
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

meneliel hat geschrieben: Na dass mir der Ausdruck ein False ausgibt, war mir klar, aber es SOLL ja ein String umgewandelt werden in ein Float. Ich dachte, ich könnte das so irgendwie checken. Aber dann mach ich es mit nem try except... danke euch
Nee, isinstance ist nicht dafür da zu "testen" ob man einen Typen in einen anderen Typen umwandeln kann, sondern nur zum Vergleich, ob zwei Objekte vom selben Typ sind!

Hier wird das näher erklärt, was Du tun solltest an der Stelle:
[wiki]Allgemeine Begriffe#E[/wiki]
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

... jojo, ist ja kein Problem. Mach so was normal eh immer mit try except...

:)

Danke nochmal.
Antworten