Seite 1 von 1

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

Verfasst: Donnerstag 24. November 2005, 20:32
von jens
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...

Verfasst: Donnerstag 24. November 2005, 22:22
von Joghurt
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.

Verfasst: Donnerstag 24. November 2005, 23:41
von BlackJack
Interessant ist auch 'dbi.program-error', das ist kein gültiger Name wegen dem '-'.

Verfasst: Freitag 25. November 2005, 07:35
von jens
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.

Verfasst: Freitag 25. November 2005, 13:37
von Joghurt
Dann geht das nicht, solange das nicht vom Autor gefixt wurde.

Verfasst: Samstag 26. November 2005, 07:16
von BlackJack
Du könntest einfach nur ``except:`` schreiben und dann über `sys.exc_info()` herausfinden was es genau war.