Seite 1 von 1

Frage zum bessteren Fehlerhandling!

Verfasst: Mittwoch 20. Dezember 2006, 13:11
von EnTeQuAk
Sooo! :)

Ich bastel wie immer an meinem dauCMS weiter...

Nun versuche ich an einigen Stellen eine verbesserte Fehlerbehandlung einzubauen.

Ich habe nun z.B. folgenden Code:

Code: Alles auswählen

    try:
        os.mkdir(rendered_path+project_name)
    except OSError, e:
        print 'Fehler: %s' % e
        if e:  #-------- HIERUM GEHTS! --------
            print 'Ist allerdings kein Problem - vorhandene Daten werden überschrieben!'
Nun ist meine Frage. Wie kann ich die genaue Fehlermeldung feststellen?

Ich habe es mit

Code: Alles auswählen

    try:
        os.mkdir(rendered_path+project_name)
    except OSError, e:
        print 'Fehler: %s' % e
        if e.startswith('[Errno 17]'): #-------- HIERUM GEHTS! --------
            print 'Ist allerdings kein Problem - vorhandene Daten werden überschrieben!'
versucht allerdings geht das net... *grml*

Code: Alles auswählen

Traceback (most recent call last):
  File "wiki_parser.py", line 116, in ?
    main()
  File "wiki_parser.py", line 112, in main
    main_parser(syntax, files, project_name, project_path)
  File "wiki_parser.py", line 90, in main_parser
    if e.startswith('[Errno 17]'):
AttributeError: OSError instance has no attribute 'startswith'
Klingt ja logisch :D Nur wie kann ich es sonst machen?

Herzlichen Dank!

MfG EnTeQuAk

Verfasst: Mittwoch 20. Dezember 2006, 13:38
von birkenfeld
dir() hilft:

Code: Alles auswählen

>>> dir(OSError)
[..., 'args', 'errno', 'filename', 'message', 'strerror']

Verfasst: Mittwoch 20. Dezember 2006, 14:21
von jens
so sollte es gehen:

Code: Alles auswählen

if e.args[0].startswith('[Errno 17]'):
Ob es allerdings klug ist, solche Fehlerbehandlungen zu machen, ist fraglich... Den wer garantiert dir, das die Meldung nicht irgendwann geändert wird?

Verfasst: Mittwoch 20. Dezember 2006, 14:23
von birkenfeld
Deswegen gibts ja auch das Attribut errno.

Verfasst: Mittwoch 20. Dezember 2006, 14:25
von BlackJack
Und das Attribut `errno` bitte gegen die Konstanten aus dem `errno`-Modul testen und nicht feste Zahlen benutzen.

Verfasst: Mittwoch 20. Dezember 2006, 15:21
von EnTeQuAk
Dann nur noch die Gegenfrage:

War das so gemeint?

Code: Alles auswählen

    try:
        os.mkdir(rendered_path+project_name)
    except OSError, e:
        if errno.errorcode[e.errno] == errno.errorcode[errno.EEXIST]:
            print 'Der Ordner/Datei\n%s\nexistiert bereits. Er wird überschrieben!' % e.filename
        else:
            print 'Fehler:\n%s' % e
Wenn ja :) Super... funktionieren tut es jedenfalls! :D

Danke!

MfG EnTeQuAk

Verfasst: Mittwoch 20. Dezember 2006, 15:26
von birkenfeld
EnTeQuAk hat geschrieben: War das so gemeint?

Code: Alles auswählen

        if errno.errorcode[e.errno] == errno.errorcode[errno.EEXIST]:
Findest du nicht, dass das etwas umständlich so ist?

Verfasst: Mittwoch 20. Dezember 2006, 15:28
von EnTeQuAk
hmm...
etwas :)

Code: Alles auswählen

if e.errno == errno.EEXIST:
Ginge auch :D Machen wa das so... ansonsten sollte es so gehen ;)

Ich meine bloß, ob es das war, was BlackJack meinte...


MfG EnTeQuAk

Verfasst: Mittwoch 20. Dezember 2006, 16:00
von BlackJack
Jup, das meinte ich.

Verfasst: Mittwoch 20. Dezember 2006, 16:09
von EnTeQuAk
Wunderbar :)

Herzlichen Dank nochmal! :D