Raise exception vs. Rendite Keine Funktionen?

Was ist besser der Praxis in eine Benutzer-definierte Funktion in Python: raise eine Ausnahme oder return None? Ich habe zum Beispiel eine Funktion, findet die Letzte Datei in einem Ordner.

def latestpdf(folder):
    # list the files and sort them
    try:
        latest = files[-1]
    except IndexError:
        # Folder is empty.
        return None  # One possibility
        raise FileNotFoundError()  # Alternative
    else:
        return somefunc(latest)  # In my case, somefunc parses the filename

Weitere option ist lassen Sie die Ausnahme und behandeln, die im aufrufenden code, aber ich finde es übersichtlicher ist, sich mit einem FileNotFoundError als ein IndexError. Oder ist es schlechte form zu re-raise eine Ausnahme mit einem anderen Namen?

  • Ähnlich: stackoverflow.com/questions/1152541/...
  • Ich lehne mich in Richtung auslösen einer exception, so bin ich gezwungen, Sie zu behandeln der Ausnahme in der aufrufenden Funktion. Wenn ich vergessen habe, zu prüfen, ob die Ausgabe ist Keiner in der aufrufenden Funktion, ich hätte einen latenten Fehler. Wenn Sie wieder Keine, hoffentlich, in der nächsten Zeile in der aufrufenden Funktion zu erhöhen wird ein AttributeError. Allerdings, wenn der zurückgegebene Wert wird Hinzugefügt, ein Wörterbuch und dann 100 Funktionsaufrufe in einer anderen source-Datei eine AttributeError ausgelöst wird, haben Sie Spaß, die Jagd nach, warum, der Wert war Keiner.
  • Im Allgemeinen bin ich auch vermeiden, dass Werte, die eine Besondere Bedeutung haben oder mehrere Signaturen für eine Funktion (es kann auch geben einen string zurück oder None).
InformationsquelleAutor parcydarks | 2009-08-21
Schreibe einen Kommentar