Проблема в том, что блок try/except
будет выполнен ровно один раз - при определении этого класса :
class Circle:
try:
# try to define this method
def __init__(self, radius):
if isinstance(radius, int):
pass
else:
raise RadiusInputError
self.radius = radius
# if we got here, the method has been defined successfully!
except RadiusInputError:
# if we got here, an exception occurred WHILE DEFINING THE METHOD
print('Radius is not a number')
Этот код не влияет на звонки на Circle.__init__
в малейшей степени.
Вы можете увидеть, как это работает здесь:
>>> class Test:
... print("before definition")
... def __init__(self):
... print("inside __self__")
... print("after definition - bye!")
...
before definition
after definition - bye!
>>> Test()
inside __self__
<__main__.Test object at 0x103541438>
>>>
Вы должны обработать исключения на сайте вызова:
class Circle:
def __init__(self, radius):
if not isinstance(radius, int):
raise RadiusInputError("Wrong radius!")
self.radius = radius
try:
c1 = Circle('hello')
except RadiusInputError as err:
print(f"Oops, something went wring: {err}"!)