[Python-de] Datumseingabe testen

Rainer Fischbach fischbach at ecs-gmbh.de
Tue Aug 27 16:38:25 EDT 2002


meine Anmerkungen stehen im Listing

At 15:53 27.08.2002 +0200, you wrote:
>Am Montag, 26. August 2002 17:47 schrieben Sie:
>> gibt es zwar nicht als Funktion im Standardumfang, doch kann  man sich das
>> selbst leicht bauen:
>>
>> from time import mktime, localtime
>> from exceptions import OverflowError, ValueError
>>
>> def valid_date (y, m, d):
>>     tt = (y, m, d, 12, 0, 0, 0, 0, 0)
>>     try:
>>         t = mktime (tt)
>>     except OverflowError:
>>         return 0
>>     except ValueError:
>>         return 0
>>     return localtime (t) [:3] == tt [:3]
>>
>
>Danke für Eure schnellen Antworten.
>
>Ich habe aber noch ein Problem, wenn ich den Code in mein Skript einbaue.
>
>def hinweis():
>    import tkMessageBox

import in einer Funktion, die immer wieder aufgerufen wird, ist nicht
besonders sinnvoll

>    tkMessageBox.showinfo("Hinweis", "Falsches Datumsformat!")
>
>def valid_date (jahr, monat, tag):
>    tt = (jahr, monat, tag, 12, 0, 0, 0, 0, 0)
>    try:
>       t = mktime(tt)
>    except OverflowError:
>    	return 0
>    except ValueError:
>    	return 0
>    if localtime(t)[:3] == tt[:3]:
>    	return 1
>    else:
>    	return 0
>
>
>def db():
>    datum = root.entry.get()    # Wert des Eingabefeldes auslesen
>    datum = split(datum, ".")
>    tag = datum[0]
>    monat = datum[1]
>    jahr = datum[2]
>
>    if valid_date(jahr, monat, tag) == 0:
>    	hinweis()

mktime erwartet ein 9-tupel, dessen Komponenten alle int-Werte sind,
valid_date also auch drei int-Werte! (Typdeklarationen haben manchmal schon
etwas für sich; man sollte sie im docstring machen) Du übergibst aber drei
Strings! Wenn man ein Liebhaber von Einzeilern ist, kann man statt der fünf
Zeilen auch knapp schreiben:

	if (lambda (d, m, y): valid_date (y, m, d)) (map (int, datum.split ('.'))):

du kannst natürlich auch die definition von valid_date anpassen, so dass es
die Reihenfolge Tag, Monat, Jahr erwartet und dann schreiben

	if apply (valid_date, map (int, datum.split ('.')))

das ist etwas kürzer

>
>    else: 
>	...
>
>Nach einigen Test weiß ich, dass die Funktion valid_date() aufgerufen wird. 
>Es wird aber kein Wert zurückgegeben. Woran kann das liegen? Wo ist mein
>Denkfehler?
>
>Danke + Gruss
>Ron
>
>_______________________________________________
>Python-de maillist  -  Python-de at starship.python.net
>http://starship.python.net/mailman/listinfo/python-de
>
>
     
    Rainer Fischbach
______________________________________________________

    ECS
    Engineering Consulting & Solutions GmbH
    Muehlstrasse 3
    D-92318  Neumarkt

    Phone:               +49 (0)9181 - 4764-84
    Fax:                 +49 (0)9181 - 4764-50
    Mobile:              +49 (0)171  - 41 41 570
    e-mail:              fischbach at ecs-gmbh.de
    WWW:                 http://www.ecs-gmbh.de
______________________________________________________






More information about the Python-de mailing list