casting richtig?

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
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Hallo,

in einem Textfeld wird eine Zahl eingelesen. Dies ist ein Stringwert. Dann führe ich die Operation float(input) aus. Allerdings kann der input auch ein Buchstabe sein, und ich möchte, wenn dies auftritt dem User eine Rückmeldung geben, dass er eine Zahl eingeben soll. Wie erreiche ich das?
Folgender Code funktioniert nicht:

Code: Alles auswählen

   zahl_liegt_vor=True
   try: 
      float(z.value)
   except NameError:
     zahl_liegt_vor=False
Sobald das casting nicht funktioniert wird lediglich die Fehlermeldung ausgegeben:

could not convert string to float:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Probiere es einfach in einer Python-Shell aus:
[codebox=pycon file=Unbenannt.txt]
In [1]: float("text")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-25fbfda44a03> in <module>()
----> 1 float("text")

ValueError: could not convert string to float: 'text'
[/code]
Das Interessante steht ganz unten: ``ValueError`` ist also der Typ der Ausnahme, die Du behandeln musst - nicht ``NameError`` ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: und der except-Block ist ja gerade dazu da, dass man kein Flag braucht.
Antworten