Raise statement

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
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Samstag 24. Mai 2008, 09:02

Hallo,

Eine kleine Frage zum Raise statement:

In der Dokumentation steht man kann es entweder so :

Code: Alles auswählen

raise 'Exception', 'Reason'
schreiben, was auch gut funktioniert, oder auch so

Code: Alles auswählen

raise Exception('Reason')
Was in diesem Falle auch fuktioniert.

Aber ich möchte meine eigene Exception aufrufen:

Code: Alles auswählen

raise 'Account', 'Nicht eingeloggt!'
Das funktioniert das aber nicht:

Code: Alles auswählen

raise Account('Nicht eingeloggt!')
NameError: name 'Account' is not defined
Wie soll ich den denn definieren?

MfG,
CracKPod
BlackJack

Samstag 24. Mai 2008, 09:05

Zum Beispiel so: ``class AccountError(Exception): pass``.

Die erste Variante nur mit Zeichenketten ist "deprecated" und fliegt in Python 3.0 raus.
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Samstag 24. Mai 2008, 09:15

Das pass am Ende macht einfach gar nichts, oder?
Ist halt nur theoretisch erforderlich damit die Klasse nicht leer ist.
Weil es erbt ja von Excpetion

Und gibt es eine Möglichkleit die Exceptions in einer Klasse zu definieren? oder muss ich das außerhalb machen. Also Klassenkapselung ^^?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 24. Mai 2008, 09:54

Crazed hat geschrieben:Das pass am Ende macht einfach gar nichts, oder?
Ja, das ist nur dazu da, den Parser glücklich zu machen, weil der sonst keinen Block hätte.
Crazed hat geschrieben:Und gibt es eine Möglichkleit die Exceptions in einer Klasse zu definieren? oder muss ich das außerhalb machen. Also Klassenkapselung ^^?
BlackJack hat dir doch die Exception in einer Klasse definiert?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Samstag 24. Mai 2008, 10:03

Ich habe eine Exception(-Klasse) im Modul definiert, und keine in einer Klasse. Falls das jetzt das war, worauf Crazed hinaus wollte.
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Samstag 24. Mai 2008, 13:10

Ich wollte eigentlich wissen wie man Klassen in Klassen kapseln kann ^^.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 24. Mai 2008, 13:56

Durch Einrückung:

Code: Alles auswählen

class Eins(object):
    class Zwei(object):
        pass
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Samstag 24. Mai 2008, 16:04

Wobei ich persönlich davon abraten würde. Mir ist bis jetzt auch noch kein Anwendungsfall unter gekommen, wo ich das gebraucht hätte.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 24. Mai 2008, 17:22

Ja, mir auch nicht. Wir könnten das jetzt aber sogar noch weiterdrehen, indem eine Instanzmethode eine Klasse zurückgibt, dann hätten wir eine großartige Verschachtelung über mehrere Ebenen. Perfekt wenn man Overengineering geplant hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Samstag 24. Mai 2008, 17:37

Die Model-Klassen bei Django nutzen das :o
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 24. Mai 2008, 17:45

In dem Fall ist aber die innere Klasse eher als Konfiguration gedacht. Das wird mit newforms-admin noch zunehmen, wenn die noch mehr Admin-Sachen aus den eigentlichen Model-Definitionen rausnehmen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten