except Exception, e: - deckt nicht alle Fehler ab???

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

Donnerstag 24. November 2005, 20:32

Ich nutzte eigentlich öfters diese Variante:

Code: Alles auswählen

        try:
            self.cursor.execute(SQLcommand)
            return self.cursor.fetchall()
        except Exception, e:
            print "Error:", e
        else:
            print "OK"
Dabei sollte doch eigentlich alle Fehler abgedeckt werden. Ist aber mit win32.odbc nicht der Fall:

Code: Alles auswählen

  121         print "SQLcommand:", SQLcommand
  122         try:
  123             self.cursor.execute(SQLcommand)
  124         except Exception, e:
  125             print "Error:", e
self = <__main__.test instance>, self.cursor = <odbccur object>, self.cursor.execute = <built-in method execute of odbccur object>, SQLcommand = 'CREATE TABLE TestTable (id INTEGER NOT NULL PRIM...AR( 50 ) NOT NULL, data2 VARCHAR( 50 ) NOT NULL);'

dbi.program-error: [Microsoft][ODBC SQL Server Driver][SQL Server]There is already an object named 'TestTable' in the database. in EXEC
Der Fehler ist natürlich berechtigt, allerdings kommt die except Behandlung nicht zum Tragen, sondern der Traceback schlägt bis zum cgitb durch...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Donnerstag 24. November 2005, 22:22

Dann wurde diese Exception nicht von Exception abgeleitet. Ich würde dem Autor mal schreiben, dass er das Interface korrigiert, das ist schlechter Stil.

Abgesehen davon geht das, was du willst, auch einfacher:

Code: Alles auswählen

try:
  ...
except:
  print "Something bad happened"
Wenn du "except:" verwendest, muss es die letzte except-Anweisung im try-block sein.
BlackJack

Donnerstag 24. November 2005, 23:41

Interessant ist auch 'dbi.program-error', das ist kein gültiger Name wegen dem '-'.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 25. November 2005, 07:35

Joghurt hat geschrieben:Abgesehen davon geht das, was du willst, auch einfacher:

Code: Alles auswählen

try:
  ...
except:
  print "Something bad happened"
Allerdings möchte ich schon die e bzw. msg von der Exception "abfangen" damit ich diese in meinem Text hinzufügen kann.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Freitag 25. November 2005, 13:37

Dann geht das nicht, solange das nicht vom Autor gefixt wurde.
BlackJack

Samstag 26. November 2005, 07:16

Du könntest einfach nur ``except:`` schreiben und dann über `sys.exc_info()` herausfinden was es genau war.
Antworten