exception - text speichern

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
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hallo.

ich habe einen DB treiber, der wenn etwas falsch ist eine exception schmeisst. Diese exception scheint ein tuple zu sein in der form (Errcode1, Errcode2, Description).

Ich möchte gerne den Errorcode aus der exception haben, wie stelle ich das an ?

Danke schonmal
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Probier mal aus:

Code: Alles auswählen

try:
    raise ValueError(1,2,3)
except ValueError, e:
    print repr(e.args), repr(e.args[0])
Ersetzen mußt Du halt noch ValueError durch den Exception-Typ den Du abfangen willst, und das wars.

--- Heiko.
--- Heiko.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Super, sogar wie erwartet recht einfach :)
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Noch eine Frage, wie funktioniert das mit global Except , also ohne angabe des Fehlertyps ?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Globale Exception? Angaben des Fehlertyps?

Meinst du vielleicht eigene Exceptions bzw. alle möglichen Exceptions?

Code: Alles auswählen

class MyException(Exception):
    pass

try:
    raise MyException(1,2,3)
except Exception, e:
    print repr(e.args), repr(e.args[0])

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Ich meine, mit exceptions für alle möglichen Fehlertypen.


also

Code: Alles auswählen

try:
    "blah"
except:
    "...."
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Genau das was jens geschrieben hat. Alle Exceptions sind von Exception abgeleitet.

--- Heiko.
--- Heiko.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Aha, also reicht es wenn mein die Basisklasse angibt ?

Dachte man muss immer die genaue Error Klasse angeben.

Thx
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Nein. Ein

Code: Alles auswählen

except cls:
fängt alle Instanzen ab die cls-Instanzen sind, also auch Instanzen von Unterklassen.
--- Heiko.
BlackJack

modelnine hat geschrieben:Genau das was jens geschrieben hat. Alle Exceptions sind von Exception abgeleitet.
Schön wärs. Man kann mit ``raise`` jedes x-beliebige Objekt "werfen". Wenn man wirklich alles abfangen will, dann darf man nur ``except:`` nehmen und muss sich die Informationen zum Beispiel mit `sys.exc_info()` holen.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Schön wärs. Man kann mit ``raise`` jedes x-beliebige Objekt "werfen". Wenn man wirklich alles abfangen will, dann darf man nur ``except:`` nehmen und muss sich die Informationen zum Beispiel mit `sys.exc_info()` holen.
Jaaaaa... Die allermeißten sind von Exception abgeleitet. String-Exceptions sind offiziell very deprecated, und die Stdlib hält sich eigentlich daran alle exceptions von Exception abzuleiten. Deswegen mein nicht ganz korrekter Kommentar. Ich hab bisher noch nie eine Exception in Produktionscode gesehen die nicht von Exception abgeleitet gewesen wäre.
--- Heiko.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

modelnine hat geschrieben:Ich hab bisher noch nie eine Exception in Produktionscode gesehen die nicht von Exception abgeleitet gewesen wäre.
Das sollte wirklich eine Ausnahme sein. Allerdings hatte ich das schonmal bei MySQLdb, zwar eine relativ alte Version des Modules, aber leider ist das bei vielen WebHostern noch zu finden :cry:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

BlackJack hat geschrieben:
modelnine hat geschrieben:Genau das was jens geschrieben hat. Alle Exceptions sind von Exception abgeleitet.
Schön wärs. Man kann mit ``raise`` jedes x-beliebige Objekt "werfen". Wenn man wirklich alles abfangen will, dann darf man nur ``except:`` nehmen und muss sich die Informationen zum Beispiel mit `sys.exc_info()` holen.
Wie würde das funktionieren mit sys.exc_info() ?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich würde lieber einfach ein except Exception, e: machen... Das sollte in 99% der Fälle funktionieren...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Mad-Marty hat geschrieben:Wie würde das funktionieren mit sys.exc_info() ?
Damit bekommt man ein Tupel mit dem Typ der "Ausnahme", der konkreten Instanz und einen Stapelabzug für den es im `traceback` Modul einige nützliche Funktionen gibt.

Code: Alles auswählen

import sys
from traceback import print_tb

class Spam:
    pass

try:
    raise Spam
except:
    type_, value, traceback = sys.exc_info()
    print type_
    print value
    print print_tb(traceback)
Antworten