diff --git a/jsonpointer.py b/jsonpointer.py index 85884f2..ae2c50f 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -307,7 +307,7 @@ def join(self, suffix): suffix_parts = suffix try: return self.__class__.from_parts(chain(self.parts, suffix_parts)) - except: # noqa E722 + except Exception: raise JsonPointerException("Invalid suffix") def __truediv__(self, suffix): diff --git a/tests.py b/tests.py index bf054ed..8f6ce5f 100755 --- a/tests.py +++ b/tests.py @@ -196,6 +196,19 @@ def test_join_magic(self): ptr12e = self.ptr1 / ["a", "b"] self.assertEqual(ptr12e.path, "/a/b/c/a/b") + def test_join_preserves_control_flow_exceptions(self): + for exception_type in (KeyboardInterrupt, SystemExit, GeneratorExit): + with self.subTest(exception_type=exception_type): + error = exception_type() + + def parts(): + yield 'valid' + raise error + + with self.assertRaises(exception_type) as caught: + self.ptr1.join(parts()) + self.assertIs(caught.exception, error) + def test_join_subclass(self): class Pointer(JsonPointer): pass