Best practice für geschachtelte Funktionsaufrufe ...

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
drnicolas
User
Beiträge: 87
Registriert: Sonntag 24. Juli 2016, 10:32

Mein Skript versucht Daten aus einem Text zu extrahieren und dies in einer Datenbank zu finden.

Das geschieht über mehrere Ebenen, zuletzt dann die Suche in der Datenbank.
Das ganze wird mehrfach durchgeführt mit unterschiedlichen Suchdaten um die Wiederfinde-Whrscheinlichkeit zu erhöhen.

Wenn alles gut geht, dann funktioniert EINE der Methoden.
Dabei kann einihes "schiefgehen".
Der häufigste Fall wird sein, dass die Dtaen schlicht nicht gefunden werden; das positive/negaitve Ergebnis muss dann also über die Aufrufebenen nach oben durchgereicht werden.
Es kann aber durchaus auch sein, dass die Datenbank nicht erreichbar ist oder die Suchparameter einen Fehler verursachen.

Das gibt momentan einen bunten Mix aus Try/except-konstrukten aber auch Rückgabecodes. Das wird mittleweile unübersichtlich.
Wie gestaltetet man sowas "elegant"?

Arbeitet man konsequent mit try/expcepts und setzt die fehlerursachen in Rückgabecodes um oder versucht man konsequent unterschiedliche Fehler zu raisen und reagiert in der obersten Ebene darauf?
Wie machen die Profis das?
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Fehler passieren, benutzt man Exceptions und keine Rückgabewerte. Das Umwandeln von Exceptions in Rückgabewerte hört sich also komisch an.
Rückgabecodes sollte es überhaupt nicht geben. Was es gibt ist der Rückgabewert None für "nichts gefunden" (siehe z.B. re.match).
Die Frage, wo man eine Exception behandelt, ist ganz einfach zu beantworten: dort, wo man sinnvoll auf den Fehler reagieren kann und das Programm wieder in einen Zustand versetzen kann, dass es normal weiterarbeitet.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

- Suche auf Art 1
- Kein Ergebnis dabei?
- Suche auf Art 2
- Kein Ergebnis dabei?
- Suche auf Art 3

So in der Art? Oder soll es konkreter werden?

Ich würde die Funktionen eine Liste mit Suchergebnissen zurückgeben lassen* oder eine leere Liste, falls keine gefunden wurden.
Dann kann ich als Aufrufer prüfen, ob die Liste leer ist, und zur nächsten Suche übergehen.

* bzw. einen Generator, der bei Bedarf das nächste Element der Liste liefert.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten