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に相当し、私が欲しいですコンテキストマネージャーによってTypeErrorとして処理されます。 私は `でisinstance(MyTypeError()、例外TypeError)== TRUE」と
__exit__(...)
は(継承を考慮すること)と同じように動作することを確認しました。解決策はありますか?
平等ではありません、それは 'issubclass()は'のためにあるものだサブクラスのためにテストすることはできません。 –
クラスのテストに '=='を使うべきではないことに注意してください。 'issubclass(Class、Class)'もtrueを返します(クラスはそれ自身のサブクラスとみなされます)。テストで '== True'を使わないでください。それは既に暗示されています。したがって、if some_test == Trueの代わりに 'some_test:'を使用し、 'inverse 'は' some_test: 'ではありません。 –
ありがとうございます。私はこれが私が探していた機能だと思う/ – Coconut