Fehler bei Eingabe

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
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Hi,
ich wollte wissen welche exception ich benutzen muss, damit die eingabe nur zahlen akzeptiert.
Habe bis jetzt immer NameError benutzt aber die fängt keine Sonderzeichen ab.
Folgender Code:

Code: Alles auswählen

while True :
     try:
          zahl = input("Geben Sie bitte eine Zahl ein: ")
          break
     except NameError:
          print "Ungültige Eingabe!"
     

print zahl
          
Also ich möchte das er nur Zahlen annimmt und bei allem anderen Ungültige Eingabe ausgibt!
Danke im Vorraus :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Benutzt Du Python 3 oder 2? Wenn Du Python 2 benutzt, lies bitte noch einmal den Kommentar in Deinem letzten Thread.
amigo hat geschrieben: ich wollte wissen welche exception ich benutzen muss, damit die eingabe nur zahlen akzeptiert.
Probiere es doch aus:

Code: Alles auswählen

In [27]: int("Hallo Welt")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/nelson/<ipython-input-27-d02ff7e65343> in <module>()
----> 1 int("Hallo Welt")

ValueError: invalid literal for int() with base 10: 'Hallo Welt'
Gehen wir davon aus, dass Du Python3 benutzt.
Um Klarheit zu schaffen: Die Eingabe akzeptiert erst einmal alles und liefert das als String zurück. Diesen musst Du dann mit einer passenden Funktion in den von Dir gewünschten Datentypen umwandeln, also z.B. in einen Integer mittels `int()`-Funktion (s. mein Beispiel).

Edit: Bitte benutze für Python-Code die Python-Code-Tags!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Er benutzt das print-Statement, daraus schließe ich: Er benutzt Python 2. ;) Schau dir halt nochmal mein Posting in deinem letzten Thread an, da hab ichs dir ja schon erklärt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nomnom hat geschrieben:Er benutzt das print-Statement, daraus schließe ich: Er benutzt Python 2. ;)
Ah... ich habe in seinem letzten Thread ja geguckt und habe das nur das `print` ganz am Schluss gesehen - und da setzte er ja Klammern drum herum. So eine unsägliche Sitte :x
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:Ah... ich habe in seinem letzten Thread ja geguckt und habe das nur das `print` ganz am Schluss gesehen - und da setzte er ja Klammern drum herum. So eine unsägliche Sitte :x
Das hängt davon ab.Heutzutage wird doch wohl jeder unter Python 2 mindestens das Folgende gesetzt haben.

Code: Alles auswählen

from __future__ import print_function
from __future__ import unicode_literals
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Das hängt davon ab.Heutzutage wird doch wohl jeder unter Python 2 mindestens das Folgende gesetzt haben.

Code: Alles auswählen

from __future__ import print_function
from __future__ import unicode_literals
Es gibt Leute, die raten speziell von `print` als Funktion in Python2 ab: Mistohikus Blog

Zudem verwendet der OP das ja auch nicht durchgängig - ich hatte die oberen print-Statements schlicht nicht mehr wahrgenommen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Also ich hab jetzt

Code: Alles auswählen

raw_input
benutzt aber wenn ich mit int() konvertieren will und das keine gültige eingabe ist, dann gibt´s nen Error. Mit welcher Exception kann ich den abfangen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

amigo hat geschrieben:... aber wenn ich mit int() konvertieren will und das keine gültige eingabe ist, dann gibt´s nen Error. Mit welcher Exception kann ich den abfangen?
Ist jetzt nicht Dein Ernst, oder? :shock:

ALso bitte: noch einmal ein Link nach oben. :P
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Okay hab´s selber rausgefunden. Muss ValueError verwenden. Aber kann mir jemand sagen wie viele Exceptions es ungefähr gibt?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

amigo hat geschrieben:Aber kann mir jemand sagen wie viele Exceptions es ungefähr gibt?
Da schaust Du mal in die Doku, Python Standard Library, Kapitel 5: "Built-in Exceptions". Dort stehen sie alle. Meine grobe Schätzung ist jetzt mal 50.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten