Python'da yeniyim ve bu sorunla karşılaştım.Python'da İstisna Nesnelerini Karşılaştırma
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
nasıl "Doğru" elde etmek için bu karşılaştırmayı yapmak gerekir: Ben örnek, iki "istisna nesneleri" karşılaştırmak çalışıyorum?
ben yapmaya çalışıyorum Ne:
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)
(muhtemelen bazı sözdizimi hatası)
Bunu neden yapıyorum? Bunu yapmak için garip bir şeydir, bu yüzden' -
>>> isinstance(e2, type(e))
True
Not doğal olarak bu alt sınıfları için izin verecektir: Ben de aynı hatayı yazdırmak istemiyorum Çünkü iki kez
Gerçekten burada ne yapmaya çalışıyorsunuz? Bir cevap verdim, ama bunun hakkında daha iyi bir yol olduğunu hayal ediyorum. –
Soruyu güncelledim, cevabınız (jenerik) orijinal soruma mükemmeldi, ama ne yazık ki benim sorunum üzerinde çalışmaz (aynı türden iki istisna, fakat farklı özelliklerim varsa, eşitlik için bir “doğruya” ihtiyacım var) Karşılaştırma) – Pedro
Tanımın benimki nasıl çalışır. –