Python: Organisation von benutzerdefinierten Ausnahmen in einem vollständigen Projekt

9

Ich habe einige Fragen zu benutzerdefinierten Ausnahmen in Python und wie sie in einem vollständigen Projekt organisiert werden sollten.

Ich habe ein ziemlich komplexes Python-Projekt mit einigen Unterpaketen, das die folgende Struktur hat ( __init__.py weggelassen):

%Vor%

Ich möchte meine eigene Exception implementieren, um sie für spezifische Fehler in den Modulen des 'workers'-Pakets zu verwenden.

Wo sollte ich diese Ausnahmen platzieren? Ich weiß, dass ich meine eigene Basis-Ausnahme haben sollte, die die Standard-Exception-Klasse unterklassifiziert und sie für meine anderen Ausnahmen unterklassifiziert. Sollte ich ein neues "Ausnahmen" -Modul unter "Arbeiter" erstellen? Setzen Sie Ausnahmeklassen in das Modul, in dem sie ausgelöst werden? In diesem Fall, wo sollte ich meine Basisklasse platzieren? Ist meine Bewerbungsstruktur angeeignet?

Ich bin neu bei Ausnahmen in Python, also bitte entschuldigt mich, wenn die Antwort offensichtlich ist ...

    
Marc Demierre 15.11.2010, 05:39
quelle

1 Antwort

5

Im Allgemeinen habe ich bei meiner eigenen Arbeit festgestellt, dass ein benutzerdefinierter Ausnahmetyp spezifisch für ein bestimmtes Modul oder Paket ist. Wenn es für ein Modul relevant ist, lege ich es nur in dieses Modul. Ich habe noch keinen Fall gefunden, in dem es besser wäre, ein Modul oder ein Paket für Ausnahmen zu haben.

Beispiele: Wenn ich ein jester -Modul habe, mit einer Klasse Juggler darin mit einer Methode juggle , die ein DroppedBall (Cue wirft faule Tomaten oder ähnliches) erhöhen kann, wäre DroppedBall im Modul jester . Dann könnten die crowd.Person Instanzen try den Jongleur beobachten und except jester.DroppedBall .

Wenn ich ein Paket food , mit verschiedenen Modulen darin, fruit , vegetable usw. hätte, die alle eine eat -Methode (geerbt von food.Foodstuff , zweifellos) haben, könnten sie dazu in der Lage sein um eine RottenException zu erhöhen, die natürlich in der Wurzel des Pakets food enthalten wäre: __init__.py .

    
Chris Morgan 15.11.2010, 05:52
quelle