0
我正在編寫一個上下文管理器,以允許捕獲某種類型的異常。用戶定義類型與內置類型比較
class AssertRaises(object):
def __init__(self, exc_type):
self.exc_type = exc_type
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type == self.exc_type:
raise AssertionError
return True
這個經理工作正常時,內置的異常升高,但失敗,這種用法:
class MyTypeError(TypeError):
pass
try:
with AssertRaises(TypeError):
raise MyTypeError()
except Exception as e:
print(type(e).__name__)
在這個例子中,用戶自定義excepton提高,但是這個例外是相當於類型錯誤,我想它由上下文管理器處理爲TypeError。 我檢查了`isinstance(MyTypeError(),類型錯誤)==真」,並希望
__exit__(...)
以相同的方式工作(考慮繼承)。有沒有解決方法?
平等不能測試子類沒有,這就是'issubclass()'是。 –
請注意,您不應該使用'=='來測試類; 'issubclass(Class,Class)'也將返回true(一個類被認爲是它自己的一個子類)。在測試中不要使用== True;這已經暗示了。因此,不是'如果some_test == True:'使用'如果some_test:',而反過來是'如果不是some_test:'。 –
謝謝你的幫助。我認爲這是我尋找/ – Coconut