[Python-de] Erbitte Codekritik.

Achim Domma (Procoders) domma at procoders.net
Mit Nov 3 16:48:59 CET 2004


Hallo Harald,

ich geb' einfach mal meinen Senf ab. Mein übliches Disclaimer: Guter 
Code hängt immer von den genauen Anforderungen/Preferenzen und der 
Pythonversion ab und ist natürlich auch Geschmacksache. Hier also meine 
persönliche Meinung! ;-) (Alles ungetestet aus dem Kopf!)

> ---------------------------
> #!/usr/bin/python
> # -*- coding: iso-8859-1 -*-
> import re

> import string
brauchst du meiner Meinung nach nicht, siehe unten

> def datum_test(datum):
>   p = re.compile(r"[^0-9]")
>   datum=p.split(datum)

Senn mich nicht alles täuschst sollte

datum=re.split(r'\D',datum)

das selbe machen.

>   if len(datum)!=3:
>     raise ValueError('Das Datum '
>        +string.join(datum,'-')+
>        ' hat nicht das richtige Format!')

Ich würde die Variable datum nicht überschreiben und hier sowas machen:

raise ValueError('Das Datum %s hat nicht das richtige Format' % original)

Wenn ich z.B. 'abc 123' übergebe und du behauptest, daß 'abc-123' das 
falsche Format hat, fände ich das seltsam.


>   if len(datum[2])>2:
>     t,m,j=datum[0],datum[1],datum[2]
>   elif len(datum[0])>2:
>     j,m,t=datum[0],datum[1],datum[2]
>   else:
>     t,m,j=datum[0],datum[1],'20'+string.zfill(datum[2],2)
>   t=int(t)
>   m=int(m)
[...]

Ab hier würde ich die Daten in ein date Objekt stecken und dem die 
Fehlermeldung überlassen. Das Objekt würde ich dann auch zurückgeben und 
der User kann es sich formatieren wie er will. Damit wird auch die 
Aufgabe der Funktion eindeutig: Nimm einen Text und mach' ein Datum 
daraus. Formatierung des Datums ist 'ne andere Aufgabe und gehört für 
mich somit sonstwo hin.

So, ich hoffe das hat dir geholfen.

Gruß,
Achim