39 lines
866 B
Python
39 lines
866 B
Python
|
# 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])
|