2015-09-11 11 views
7

Pythonにはまったく新しいです。このコードを持っている:Python、カスタム例外の区別

def someFunction(num): 
    if num < 0: 
     raise Exception("Negative Number!") 
    elif num > 1000: 
     raise Exception("Big Number!") 
    else: 
     print "Tests passed" 


try: 
    someFunction(10000) 
except Exception: 
    print "This was a negative number but we didn't crash" 
except Exception: 
    print "This was a big number but we didn't crash" 
else: 
    print "All tests passed and we didn't crash" 

私はもともとraise "Negative Number!"などを使用したがすぐに、これは物事の古い方法であることを発見したと、あなたはExceptionクラスを呼び出す必要があります。今はうまくいっていますが、2つの例外を区別するにはどうすればいいですか?下のコードでは、「これは負の数値でしたが、クラッシュしませんでした」と表示されています。これに関するあらゆる指針は素晴らしいでしょう。ありがとう!

+0

参照[ドキュメント](HTTPSを://ドキュメント.python.org/2/tutorial/errors.html)。 – erip

+3

通常は 'Exception'を生成するのではなく、そのサブクラスを生成します。 –

答えて

11

発生した例外の種類を区別できるようにするには、独自の例外クラスを作成する必要があります。例(私はこれがあなたが望むものに最も近いと思うように私はValueErrorから継承された - それはまた、あなただけの区別は重要ではないはずValueErrorをキャッチすることができます):

class NegativeError(ValueError): 
    pass 

class BigNumberError(ValueError): 
    pass 

def someFunction(num): 
    if num < 0: 
     raise NegativeError("Negative Number!") 
    elif num > 1000: 
     raise BigNumberError("Big Number!") 
    else: 
     print "Tests passed" 

try: 
    someFunction(10000) 
except NegativeError as e: 
    print "This was a negative number but we didn't crash" 
    print e 
except BigNumberError as e: 
    print "This was a big number but we didn't crash" 
    print e 
else: 
    print "All tests passed and we didn't crash" 
+4

[except ...、...]の代わりに 'except ... as ... 'を使う(http://stackoverflow.com/a/2535770/2846140) – Vincent

+0

私は同意します...更新しました。 –

+0

ありがとう、これは素晴らしいソリューションです。 NegativeErrorはNegativeErrorと同等のeですか? – Kex