Seite 1 von 1

Problem mit isinstance

Verfasst: Freitag 13. Juni 2008, 13:02
von meneliel
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...?

Verfasst: Freitag 13. Juni 2008, 13:11
von EyDu
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.

Re: Problem mit isinstance

Verfasst: Freitag 13. Juni 2008, 13:13
von Hyperion
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

Verfasst: Freitag 13. Juni 2008, 13:25
von meneliel
>>> 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

Verfasst: Freitag 13. Juni 2008, 13:40
von Hyperion
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]

Verfasst: Freitag 13. Juni 2008, 14:03
von meneliel
... jojo, ist ja kein Problem. Mach so was normal eh immer mit try except...

:)

Danke nochmal.