summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/basics/subclass_native_exc_new.py39
-rw-r--r--tests/basics/subclass_native_exc_new.py.exp6
2 files changed, 45 insertions, 0 deletions
diff --git a/tests/basics/subclass_native_exc_new.py b/tests/basics/subclass_native_exc_new.py
new file mode 100644
index 000000000..c1bd89a6f
--- /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 000000000..65709b2cc
--- /dev/null
+++ b/tests/basics/subclass_native_exc_new.py.exp
@@ -0,0 +1,6 @@
+GoodException __new__
+<class 'Dummy'> good message
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException