2012-04-09 20 views
2

私はPythonを初めて使い慣れました。 私は例外を使わずに簡単なエラー処理を実現する方法を考えていました。 私はパターンを思い付いたが、私はそれはニシキヘビの方法であるかどうかわからないんだけど:Pythonの単純なエラー処理パターン

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

、呼び出し元が例外だけを使用し、この

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

回答ありがとうございます。要約:Pythonの例外は高価ではありません(はい、私はJavaから来ています)。 – Pedru

+1

例外を避けるためにコードをもっと複雑にしているのであれば、パフォーマンスについて真の懸念から、最初はPythonを使用すべきではないでしょう...と言われています。 :) –

+0

私はPythonでの例外の使用はルールであり、例外ではないと信じています –

答えて

0

あなたはそうしたようになります。 :)しかし、ええ、例外を介してエラーを渡すことは例外的ではありません、それは非常にPythonで一般的なので、慣用的に例外を使用したいと思うでしょう。しかしここにあなたのコード(ビットが変更されました)があります。

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

Pythonでの例外の使用は、それほど過酷ではありません。 Pythonで例外がアプリケーションのフローを制御するには、いくつかの場所で使用されている、例えば、あなたがあなたのパターンを使用して、以下のメソッドを持ってイメージングすることができます。そこで

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

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

    return True, None 

を、StopIteration exceptionある例外は、すでに存在しています、つまり、例外の使用を回避しようとしたとしても、内部的に使用されます。だから私の答えは、例外を使用して、これはJava、C#などではありません。コードの残りの部分と比較して例外は完全に高価であり、あなたはコードをunpythonicにしています。

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

あなたが使用することができ提起される可能性がありますどのようなエラーがわかっている場合:

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' 

のように。

関連する問題