Eingabe validieren

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
moose
User
Beiträge: 7
Registriert: Freitag 19. Februar 2010, 16:26

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?
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Casts in die entsprechende Zahlenklasse sollten einen ValueError erzeugen, falls ein ungültiger String übergeben wird.
http://www.felix-benner.com
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

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.
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
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
>>> 
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

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
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@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.
Antworten