Seite 1 von 1
Eingabe validieren
Verfasst: Montag 29. März 2010, 12:16
von moose
Hi,
ich habe ein Python-Skript geschrieben, das eine Eingabe mit raw_input() vordert und mit dieser dann weiterrechnet. Ich brauch unbedingt eine Zahl als Eingabe. Wie kann ich die Ausführung des Skriptes stoppen, bzw. nochmals nachfragen, falls keine Zahl eingegeben wurde?
Verfasst: Montag 29. März 2010, 12:47
von tordmor
Casts in die entsprechende Zahlenklasse sollten einen ValueError erzeugen, falls ein ungültiger String übergeben wird.
Verfasst: Montag 29. März 2010, 12:58
von querdenker
Zumindest unter python 2.6.x funktioniert folgendes:
Code: Alles auswählen
>>> t1="123456"
>>> t2="1a2b3c"
>>> t1.isdigit()
True
>>> t2.isdigit()
False
>>>
Wie das mit python 3.x aussieht kann ich nicht sagen.
Verfasst: Montag 29. März 2010, 13:15
von BlackJack
Wobei das eventuell gültige Zahlen zurückweist:
Code: Alles auswählen
In [338]: '-42'.isdigit()
Out[338]: False
In [339]: ' 42'.isdigit()
Out[339]: False
Verfasst: Montag 29. März 2010, 14:59
von Pascal
try und except....
Code: Alles auswählen
>>> def ist_zahl(zahl):
try:
float(zahl)
except ValueError:
return False
return True
>>> ist_zahl('-452')
True
>>> ist_zahl('hgdsfjd')
False
>>>
Verfasst: Montag 29. März 2010, 16:04
von b.esser-wisser
Die Validierung kann man ja gleich in die eingabe einauen:
Code: Alles auswählen
#! /usr/bin/env python2.6
# coding: utf-8
import decimal
def read_input(msg="", converter=int, error_msg="Try again"):
while True:
try:
return converter(raw_input(msg))
except ValueError:
print error_msg
if __name__ == "__main__":
# Kurze demo:
print read_input("Int:")
print read_input("Float:", float)
print read_input("Complex:", complex)
print read_input("Decimal:", decimal.Decimal)
hth, Jörg
Verfasst: Montag 29. März 2010, 16:05
von cofi
@Pascal: Die Funktion macht das Validieren aber nur umstaendlicher und hat keinen Mehrwert gegenueber der direkten Anwendung
Code: Alles auswählen
try:
value = float(input_)
except ValueError, e:
print cry()
else:
print be_happy()
Zumal man dann immernoch an den Wert muss.