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.