Exceptions (richtig) auslösen

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Nicht lacjen, aber wie löse ich eigentlich exeptions richtig aus? Unter Delphi sage ich einfach
raise exception.create('Dieser Fehler ist eine FataMorgana')
Aber wie sage ich's meiner Python?

Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi hans,

Code: Alles auswählen

raise 'Dieser Fehler ist eine FataMorgana'

Gruß

Fritz
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

aua!

war zu einfach :oops:

Hans
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Kann das sein, das sich das raise Statement mit Version 2.2 geändert har? Neue Syntax:

Code: Alles auswählen

raise EExceptionClass, 'Message'
Ich habe mir mal pychecker installiert und drüberlaufen lassen. Eigentlich eine feine Sache, dass man den Sourcecode prüft, bevor der auf das System losgelassen wird.

Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Hans,

wie auch in der Pythondoku zu lesen, sind beide schreibweisen möglich, mit der 2. kannst Du eben noch den Typ der Exception spezifizieren. Geht auch in der Version 2.1.

Code: Alles auswählen

>>> raise "Fehler!"
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
Fehler!
>>> raise TypeError, "Fehler!"
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: Fehler!
>>> 
wobei die 2. Version vorzuziehen ist, da sie mit einem try ... except Block abgefangen werden kann.

Gruß

Dookie
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Hi Dookie

ja alles nicht so schlimm. Ich wollte nur darauf hinweisen. Hatte mich als Newbie irritiert, dass bei meinem Sourcecode auf einmal Warnungen (keine Fehler) hochkamen. Es dürfte aber wohl zu Fehlern kommen, wenn jemand die neue Form auf seiner alten Kiste anzuwenden versucht.

Was soll's, muß man halt immer dabeischreiben womit man entwickelt hat. Halt ich so oder so für sinnvoll. (Ich liebe Versionsnummern, weil die meisten Anwender das für Ballast halten).

Hans
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Du kannst auch Excepzions wie nach der ersten art abfangen, musst dann aber so vorgehen:

Code: Alles auswählen

>>> Fehler="Fehler"
>>> try:
        raise Fehler # der Fehler wird geworfen, kann aber auch von anderen Funktionen (etc.) ausgelöst werden. Soll nur verdeutlichen, dass dieser aufgetreten ist
    except Fehler:
        print "Alles unter Kontrolle"

>>> "Alles unter Kontrolle"
Der String, der als Fehler geworfen wird, muss im exceptblock mit Identität abgefangn werden. das geht gut, wenn man ihn vorher in ner Variablen speichert, quasi definiert.
Antworten