15

私はPythonが初めてで、この問題で立ち往生しています。2 つの「例外オブジェクト」を比較しようとしています。例:

try:
    0/0
except Exception as e:
    print e
>> integer division or modulo by zero

try:
    0/0
except Exception as e2:
    print e2
>> integer division or modulo by zero

e == e2
>> False

e is e2
>> False

「True」を取得するには、この比較をどのように実行すればよいですか?

私がやろうとしていること:

class foo():
    def bar(self, oldError = None):
        try:
            return urllib2.urlopen(someString).read()                   
        except urllib2.HTTPError as e:
            if e.code == 400: 
               if e != oldError: print 'Error one'
            else: 
               if e != oldError: print "Error two"
            raise
         except urllib2.URLError as e:
             if e != oldError: print 'Error three'
             raise

class someclass():        
    # at some point this is called as a thread
    def ThreadLoop(self, stopThreadEvent):
        oldError = None
        while not stopThreadEvent.isSet():
            try:
                a = foo().bar(oldError = oldError)
            except Exception as e:
                oldError = e
            stopThreadEvent.wait(3.0)

(おそらく何らかの構文エラー)

なぜ私はそれをしているのですか?同じエラーを 2 回出力したくないため

4

3 に答える 3

26

ほとんどの例外クラスでは、機能の同等性をテストできます。

type(e) is type(e2) and e.args == e2.args

これにより、それらのクラスが完全に同一であり、同じ例外引数が含まれていることがテストされます。これは、 を使用しない例外クラスでは機能しない可能性がありますargsが、私の知る限り、すべての標準例外で機能します。

于 2013-04-05T21:53:43.343 に答える
7

例外のタイプを確認 したい:

>>> isinstance(e2, type(e))
True

当然、これによりサブクラスが可能になることに注意してください-これは奇妙なことなので、あなたが探している動作がわかりません.

于 2013-04-05T21:48:26.373 に答える