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

Frage zum bessteren Fehlerhandling!

Beitragvon EnTeQuAk » Mittwoch 20. Dezember 2006, 13:11

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

Beitragvon birkenfeld » Mittwoch 20. Dezember 2006, 13:38

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 20. Dezember 2006, 14:21

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?

CMS in Python: http://www.pylucid.org
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

Beitragvon birkenfeld » Mittwoch 20. Dezember 2006, 14:23

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

http://pythonic.pocoo.org/
BlackJack

Beitragvon BlackJack » Mittwoch 20. Dezember 2006, 14:25

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:

Beitragvon EnTeQuAk » Mittwoch 20. Dezember 2006, 15:21

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

Beitragvon birkenfeld » Mittwoch 20. Dezember 2006, 15:26

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:

Beitragvon EnTeQuAk » Mittwoch 20. Dezember 2006, 15:28

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
BlackJack

Beitragvon BlackJack » Mittwoch 20. Dezember 2006, 16:00

Jup, das meinte ich.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 20. Dezember 2006, 16:09

Wunderbar :)

Herzlichen Dank nochmal! :D

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]