diff --git a/py/magic/assertion.py b/py/magic/assertion.py index 518fa06a3..31eb13c95 100644 --- a/py/magic/assertion.py +++ b/py/magic/assertion.py @@ -8,7 +8,14 @@ class AssertionError(BuiltinAssertionError): def __init__(self, *args): BuiltinAssertionError.__init__(self, *args) if args: - self.msg = str(args[0]) + try: + self.msg = str(args[0]) + except (KeyboardInterrupt, SystemExit): + raise + except: + self.msg = "<[broken __repr__] %s at %0xd>" %( + args[0].__class__, id(args[0])) + else: f = sys._getframe(1) try: diff --git a/py/magic/testing/test_assertion.py b/py/magic/testing/test_assertion.py index d2eb0f8fd..b3b337175 100644 --- a/py/magic/testing/test_assertion.py +++ b/py/magic/testing/test_assertion.py @@ -96,3 +96,11 @@ def test_assert_implicit_multiline(): except AssertionError, e: assert e.msg.find('assert [1, 2, 3] !=') != -1 + +def test_assert_with_brokenrepr_arg(): + class BrokenRepr: + def __repr__(self): 0 / 0 + e = AssertionError(BrokenRepr()) + if e.msg.find("broken __repr__") == -1: + py.test.fail("broken __repr__ not handle correctly") +