Frage zum bessteren Fehlerhandling!

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

dir() hilft:

Code: Alles auswählen

>>> dir(OSError)
[..., 'args', 'errno', 'filename', 'message', 'strerror']
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Deswegen gibts ja auch das Attribut errno.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Und das Attribut `errno` bitte gegen die Konstanten aus dem `errno`-Modul testen und nicht feste Zahlen benutzen.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Wunderbar :)

Herzlichen Dank nochmal! :D
Antworten