2012-04-09 9 views
2

Ich bin ziemlich neu in Python. Ich habe mich gefragt, wie man eine einfache Fehlerbehandlung ohne Ausnahmen erreicht, was manchmal (denke ich) übertrieben ist. ich mit einem Muster kam, aber ich bin nicht sicher, ob es der pythonic Weg ist:Python, einfache Fehlerbehandlung Muster

def someFunct(someArgs): 
    # do stuff... 
    if error: 
     return False, 'error message' 
    return True,None 

und der Anrufer würde verwenden Ausnahmen so etwas wie diese

success,errMsg = someFunct(myAwesomeArgs) 
if success: 
    # yey! 
else: 
    # handle error 
+0

Danke für die Antworten. Zusammenfassung: Ausnahmen in Python sind nicht so teuer (ja, ich komme aus Java). – Pedru

+1

Wenn Sie den Code komplizierter machen, um Ausnahmen zu vermeiden, sollten Sie Python wahrscheinlich nicht aus echter Sorge um die Leistung heraus verwenden ... das heißt, ein sehr großer Prozentsatz von Bedenken hinsichtlich der Leistung ist nicht wirklich echt :) –

+0

Ich glaube, die Verwendung von Ausnahmen in Python ist die Regel und nicht die ... Ausnahme –

Antwort

0

Sie würden tun, wie Sie es taten. :) Aber ja, das Übergeben von Fehlern über Ausnahme ist nicht außergewöhnlich, es ist ziemlich üblich in Python, so idiomatisch würden Sie Ausnahme verwenden möchten. Aber hier ist Ihr Code (Bit geändert)

def somefunc(*args): 

    # do stuff, return -1 on eror 
    error_value = do_suff() 
    if error_value == -1: 
      return True, "error message" 
    else: 
      return False, None 

success, err = somefunc(1,2) 

if success: 
    # yay! 
else: 
    # handle error 
3

Verwenden von Ausnahmen in Python ist kein Overkill was auch immer. Ausnahmen in Python sind an mehreren Stellen verwendet, um den Fluss Ihrer Anwendung zu steuern, zum Beispiel, kann Abbildungs ​​Sie die folgende Methode haben Sie das Muster mit:

def some_function(*args): 
    """Do stuff using a loop.""" 

    for i in [1, 2, 3, 4]: 
     print i 

    return True, None 

Dort gibt es bereits eine Ausnahme, die die StopIteration exception ist, Das heißt, auch wenn Sie versucht haben, die Verwendung einer Ausnahme zu vermeiden, wird sie intern verwendet. Also meine Antwort ist, verwenden Sie Ausnahmen, das ist nicht Java, C# etc .. wo Ausnahmen sind sehr teuer im Vergleich mit dem Rest des Codes und Sie machen Sie nur unpythonisch.

0
def someFunct(someArgs): 
    try: 
    # do stuff... 
    return True,None 
    except: 
     return False, 'error message' 

, wenn Sie wissen, was Fehler könnten Sie verwenden können, erhöht werden:

except errorType1: 
     return False, 'very bad' 
    except errorType2: 
     return False, 'very very bad' 
    except errorType3: 
     return False, 'the computer is dead. get a new one' 

und so weiter.