hi!
wie kann man selbst einen error definieren und raisen?
folgender umstand: ich habe einen sqliteserver und einen client.
wenn nun der sqliteserver einen error meldet (tabelle existiert bereits etc.),
soll dieser automatisch an den client weitergesendet werden.
dieser soll nun aber einen "Clone" von der Fehlermeldung an den user weitergeben.
mein Problem:
ich könnte natürlich ein False/True mitsenden, und damit dann zuerst etwas printen und danach einen systemexit erzwingen, allerdings dachte ich mir, dass es weitaus schöner wäre, einen error selbst zu erstellen, da ich das ebenfalls noch in anderen fällen gebrauchen kann (login, ...).
error selbstgemacht
http://www.cs.unm.edu/~dlchao/flake/doom/
Hi,
meinst Du eine eigene Ausnahme definieren
Im einfachsten Fall von der Basisklasse Exception ableiten
MfG
Andreas
meinst Du eine eigene Ausnahme definieren
Im einfachsten Fall von der Basisklasse Exception ableiten
Code: Alles auswählen
class MeinFehler(Exception):
pass
Andreas
THX!
edit: und wie gibt man dem den typischen errortext?
edit: und wie gibt man dem den typischen errortext?
Zuletzt geändert von murph am Mittwoch 2. August 2006, 20:54, insgesamt 1-mal geändert.
http://www.cs.unm.edu/~dlchao/flake/doom/
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi murph!murph hat geschrieben:wie kann man selbst einen error definieren und raisen?
Das geht so:
Code: Alles auswählen
>>> class DatabaseError(RuntimeError):
... """Datenbankinterner Fehler"""
... def __init__(self, description = ""):
... self.description = description
... def __str__(self):
... return self.description
...
>>> raise DatabaseError("Also, ich bin der Beschreibungstext...")
Traceback (most recent call last):
File "<input>", line 1, in ?
DatabaseError: Also, ich bin der Beschreibungstext...
>>>
lg
Gerold
Zuletzt geändert von gerold am Mittwoch 2. August 2006, 23:19, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
THX!
http://www.cs.unm.edu/~dlchao/flake/doom/
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Oder statt:
einfach:
Frage mich allerdings welches die bessere Variante ist und überhaupt: Warum gibt es zwei Varianten???
Code: Alles auswählen
raise DatabaseError("Also, ich bin der Beschreibungstext...")
Code: Alles auswählen
raise DatabaseError, "Also, ich bin der Beschreibungstext..."
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das zweite ist die ältere Variante. Inzwischen ist es sinnvoller die erste zu verwenden, da die zweite irgendwann verschwinden wird.
@birkenfeld - oder wer das sonst noch weiß:
Das ist mir neu. Ich habe recht viel Code mit der "alten" Syntax. Gibt es einen Link , der diese Syntax als deprecated erklärt? (Habe nichts finden können und mein Python gibt auch keine entsprechende Warnung (noch 2.4.1.).)
Gruß,
Christian
Das ist mir neu. Ich habe recht viel Code mit der "alten" Syntax. Gibt es einen Link , der diese Syntax als deprecated erklärt? (Habe nichts finden können und mein Python gibt auch keine entsprechende Warnung (noch 2.4.1.).)
Gruß,
Christian
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Christian!CM hat geschrieben:Gibt es einen Link , der diese Syntax als deprecated erklärt? (Habe nichts finden können und mein Python gibt auch keine entsprechende Warnung (noch 2.4.1.).)
Man liest es ab und zu in einem Buch, -- dass die Variante mit Klammern sich wahrscheinlich durchsetzen wird, da ja auch "Fehlerklassen" statt "String-Exceptions" empfohlen werden.
Hier http://docs.python.org/tut/node10.html# ... 0000000000 findet man auch einen kleinen Hinweis darauf:
Also von "deprecated" kann noch keine Rede sein.The first argument to raise names the exception to be raised. The optional second argument specifies the exception's argument. Alternatively, the above could be written as raise NameError('HiThere'). Either form works fine, but there seems to be a growing stylistic preference for the latter.Code: Alles auswählen
>>> raise NameError, 'HiThere' Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: HiThere
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
In Python 3.0 wird nur noch die "neue" Form erlaubt sein (PEP 3100). Es gab so einen Versuch schon früher (PEP 317, darin ist auch ein Link zu einem Guido-Quote von 1997(!), wo er die neue Form bevorzugt), wurde aber wegen Kompatibilitätsgründen damals abgelehnt.
Hoi Gerold und birkenfeld,
Danke für die Info. Dann werde ich mich mal an die Umstellung machen (hat ja noch etwas Zeit). Ich finde die "neue" Syntax ja auch schöner, sah aber bisher keinen Grund meinen Code zu ändern ...
Gruß,
Christian
Danke für die Info. Dann werde ich mich mal an die Umstellung machen (hat ja noch etwas Zeit). Ich finde die "neue" Syntax ja auch schöner, sah aber bisher keinen Grund meinen Code zu ändern ...
Gruß,
Christian