From c3c2c37fbcc59f8ecd58dc294b31ad4d239fd52c Mon Sep 17 00:00:00 2001 From: Mike Wadsten Date: Mon, 13 Jan 2020 11:52:36 -0600 Subject: [PATCH] tests/basics: Add tests for type-checking subclassed exc instances. --- tests/basics/subclass_native_exc_new.py | 39 +++++++++++++++++++++ tests/basics/subclass_native_exc_new.py.exp | 6 ++++ 2 files changed, 45 insertions(+) create mode 100644 tests/basics/subclass_native_exc_new.py create mode 100644 tests/basics/subclass_native_exc_new.py.exp diff --git a/tests/basics/subclass_native_exc_new.py b/tests/basics/subclass_native_exc_new.py new file mode 100644 index 0000000000..c1bd89a6fa --- /dev/null +++ b/tests/basics/subclass_native_exc_new.py @@ -0,0 +1,39 @@ +# test subclassing exceptions and providing __new__ + + +class Dummy(BaseException): + pass + + +class GoodException(BaseException): + def __new__(cls, *args, **kwargs): + print("GoodException __new__") + return Dummy(*args, **kwargs) + + +class BadException(BaseException): + def __new__(cls, *args, **kwargs): + print("BadException __new__") + return 1 + + +try: + raise GoodException("good message") +except BaseException as good: + print(type(good), good.args[0]) + +try: + raise BadException("bad message") +except Exception as bad: + # Should be TypeError 'exceptions must derive from BaseException' + print(type(bad), bad.args[0]) + +try: + + def gen(): + yield + + gen().throw(BadException) +except Exception as genbad: + # Should be TypeError 'exceptions must derive from BaseException' + print(type(genbad), genbad.args[0]) diff --git a/tests/basics/subclass_native_exc_new.py.exp b/tests/basics/subclass_native_exc_new.py.exp new file mode 100644 index 0000000000..65709b2ccf --- /dev/null +++ b/tests/basics/subclass_native_exc_new.py.exp @@ -0,0 +1,6 @@ +GoodException __new__ + good message +BadException __new__ + exceptions must derive from BaseException +BadException __new__ + exceptions must derive from BaseException