Python input prüfen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Der einfachste und zuverlässigste Weg ist, es auszuprobieren:

>>> int("3")
3
>>> int("")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> int("bla")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'bla'
>>>

Also wird offenbar eine Exception (ValueError) geworfen, wenn keine Zahl drinsteht. Diese Exception kann man fangen (mit einem try-except-Block).

try:
    zpunkte = int(input("Wie viele Punkte hast du?"))
except ValueError:
    print("Das war keine Zahl!")

Zahhak  23.07.2021, 22:41

Besser wäre es allerdings sich das "teure" Exception-Handling zu sparen und z.B. etwas in der Art zu benutzen:

user_input = input("Wie viele Punkte hast du?")
if user_input and userinput.isnumeric():
    zpunkte = int(user_input)
else:
    print("Das war keine Zahl!")
1
alfredo153  24.07.2021, 07:19
@Zahhak

Das wäre keine gute Idee. Die Methode isnumeric() prüft, ob das jeweilige Zeichen in Unicode als "numerisch" gilt - und das sind viele Zeichen, die von int() und Co. nicht in eine Zahl umwandelbar sind. Zum Beispiel:

>>> "½⒍⑪".isnumeric()
True

Um also ganz sicher zu gehen, müsste man eine selbstgestrickte Regex anwenden - da ist es aber wirklich besser und zuverlässiger (und "pythonischer"), sich auf den ValueError zu verlassen.

1