2015-07-10 22 views
6

In C, wenn ich nicht falsch liege, die main Funktion gibt 0, wenn keine Fehler aufgetreten sind, und etwas anderes als 0, wenn ein Fehler auftritt.Fehlerbehandlung

Es ist angemessen, das Gleiche in Python zu tun (solange eine Funktion keinen bestimmten Wert zurückgeben muss, sondern nur einen, um den Erfolg/Fehler anzuzeigen); oder behandeln Sie einfach Ausnahmen?

+1

für eine benannte Funktion 'check_blub' /' is_blub' Sie sollten 'True' oder' False' zurückgeben. Oft werden auch Funktionen namens 'validate_blub' angezeigt, die häufig einen ValueError auslösen. – kay

+0

@cdarke Danke für Ihren Kommentar; aber verstehe, dass ich C. nicht gelernt habe. :-) –

Antwort

13

In Python sollten Sie den Rückgabewert nicht verwenden, um einen Fehler anzuzeigen. Sie sollten Ausnahmen verwenden.

Also, entweder lassen Sie die Ausnahme, die ausgelöst hat Blase, oder werfen Sie eine neue.

def check_foo(foo): 
    if foo == bar: 
     do_something(args) 

try: 
    check_foo(...) 
except SomeError: 
    # Oops! Failure! 
    something_went_wrong() 
else: 
    # Yay! Success! 
    everything_went_well() 

In manchen Fällen ist es sinnvoll Funktionen zu haben, die einen boolean zurückgeben, aber das sollte nicht verwendet werden Fehler anzuzeigen.

Dies wird typischerweise in Routinekontrollen eingesetzt, wo etwas wahr oder falsch sein kann, und keiner ist außergewöhnlich (dh weder ist ein Fehler):

def is_foo(foo): 
    return foo == "foo" 
+0

Also statt die Rückgabe der Funktion in eine Bedingung aufzunehmen, wie es einige Sprachen tun, führe ich einfach den ganzen Code aus und handle dann mit Fehlern. Habe ich es? –

+0

@ J.C.Rocamonde Ja. Und manchmal, Sie haben einfach keine vernünftige Sache zu tun, wenn ein Fehler passiert, in diesem Fall lassen Sie sie einfach aufblasen und den Dolmetscher ganz beenden. –

3

Nein, sollten Sie nicht. Python hat andere Formen der Fehlerbehandlung, und wenn Sie wirklich einen Erfolgscode zurückgeben wollen, ist true und false der bessere Weg. Als Anrufer sollten Sie wirklich davon ausgehen können, dass alles wie erwartet abgelaufen ist, und dann können Sie einen beschreibenden Fehler auslösen, wenn etwas schief gelaufen ist.