From 1cf46a1f40bdec5c86ac8acef97343eee68902e6 Mon Sep 17 00:00:00 2001 From: Thibaut Decombe Date: Mon, 30 Dec 2024 23:38:03 +0100 Subject: [PATCH 1/2] Add failing test --- tests/test_common.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_common.py b/tests/test_common.py index 38898be3..2ca9f968 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -291,6 +291,14 @@ class Custom(metaclass=Metaclass): with pytest.raises(TypeError, match="Oh no!"): dec.decode(msg) + @pytest.mark.parametrize("err_cls", [msgspec.DecodeError, msgspec.ValidationError]) + def test_decode_errors_subclass_of_value_error(self, err_cls): + assert issubclass(err_cls, ValueError) + + @pytest.mark.parametrize("err_cls", [msgspec.EncodeError, msgspec.MsgspecError]) + def test_other_errors_not_subclass_of_value_error(self, err_cls): + assert not issubclass(err_cls, ValueError) + @pytest.mark.skipif( PY312, From 0b1490125111d6c6d94da6f631774404b9442700 Mon Sep 17 00:00:00 2001 From: Thibaut Decombe Date: Mon, 30 Dec 2024 23:52:33 +0100 Subject: [PATCH 2/2] Make DecodeError a subclass of ValueError too --- msgspec/_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msgspec/_core.c b/msgspec/_core.c index bfb73680..83de473b 100644 --- a/msgspec/_core.c +++ b/msgspec/_core.c @@ -22102,7 +22102,7 @@ PyInit__core(void) st->DecodeError = PyErr_NewExceptionWithDoc( "msgspec.DecodeError", "An error occurred while decoding an object", - st->MsgspecError, NULL + PyTuple_Pack(2, st->MsgspecError, PyExc_ValueError), NULL ); if (st->DecodeError == NULL) return NULL;