2016-12-15 9 views
-1

であれば、私はありませんいくつかのコードを持っている:オブジェクトがExceptionクラス

try: 
    result = func() 
except StandardError as e: 
    result = e 

にはどうすればresultは例外が含まれているかどうかを確認することができますか?

isinstance(result, Exception)を使用すると、例外がクラスであり、インスタンスではありません。 type(ValueError)<type 'type'>となる。

---編集---

まあ愚かでした。上記のコードは、私がfunc()をどのように使っていたかを正確に示したものですが、func()のテストはraise ValueErrorではなくreturn ValueErrorでした。前者はクラスを返し、後者はインスタンスを返します。だから問題は説明されていませんでした。

+1

ええと...あなたが実際に ''でisinstance(結果、例外を)試してみましたか? 'e'は' StandardError'クラスではなく 'StandardError'の__instance__なので、私のために働きます。 –

+3

なぜあなたのコードはそうしていますか? – user2357112

+0

例外ハンドラが実行された場合、 'e'は' StandardError'のインスタンスになります...あなたの最後の段落が何を意味するのか分かりません... – mgilson

答えて

2

私はこれがあなたのデザインのロジックを見直し必要とXY Problemであると確信していますが、ここではあなたの直接の質問への答えである:正常に動作しますisinstance

>>> try: 
...  int('a') 
... except ValueError as e: 
...  result = e 
... 
>>> type(result) 
<class 'ValueError'> 
>>> isinstance(result, Exception) 
True 

あなたの問題はあなたがValueErrorをテストしたことがあります(クラス)であり、e(インスタンスはValueError)ではありません。おそらく(intをサブクラス)boolと、次の例は、これをより明確になります。

>>> isinstance(bool, int) 
False 
>>> isinstance(True, int) 
True 
関連する問題