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
exception - text speichern
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Probier mal aus:
Ersetzen mußt Du halt noch ValueError durch den Exception-Typ den Du abfangen willst, und das wars.
--- Heiko.
Code: Alles auswählen
try:
raise ValueError(1,2,3)
except ValueError, e:
print repr(e.args), repr(e.args[0])
--- Heiko.
--- Heiko.
- 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?
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])
Ich meine, mit exceptions für alle möglichen Fehlertypen.
also
also
Code: Alles auswählen
try:
"blah"
except:
"...."
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Nein. Ein
fängt alle Instanzen ab die cls-Instanzen sind, also auch Instanzen von Unterklassen.
Code: Alles auswählen
except cls:
--- Heiko.
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 hat geschrieben:Genau das was jens geschrieben hat. Alle Exceptions sind von Exception abgeleitet.
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
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.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.
--- Heiko.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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 findenmodelnine hat geschrieben:Ich hab bisher noch nie eine Exception in Produktionscode gesehen die nicht von Exception abgeleitet gewesen wäre.

Wie würde das funktionieren mit sys.exc_info() ?BlackJack hat geschrieben: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 hat geschrieben:Genau das was jens geschrieben hat. Alle Exceptions sind von Exception abgeleitet.
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.Mad-Marty hat geschrieben:Wie würde das funktionieren mit sys.exc_info() ?
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)