__init__ 方法中的异常处理

Exception handling in __init__ method

我是初学者,正在解决一个问题。如果用字符串参数传递对象,我必须引发异常,但该程序的输出为空白。有人可以帮忙吗?

class RadiusInputError(Exception):
    pass

class Circle:
    def __init__(self,radius):
        self.radius=radius
        if type(self.radius) == "<class 'str'>":
            raise RadiusInputError

try:
    a = Circle('Hello')
except RadiusInputError:
    print("'Hello' is not a number.")

你真的不应该以那种方式检查类型

您的代码不起作用的原因是:

>>> type(type(str))
<class 'type'>
>>> type(str)
<class 'type'>

如您所见,type(str) 的打印表示看起来像一个您可以比较的字符串,但表达式 type(self.radius) == "<class 'str'>": 正在比较左侧的 typestr 在右侧,永远不会计算为真。检查某物是否为特定类型的方法是使用 isinstance 如下:

class RadiusInputError(Exception):
    pass

class Circle:
    def __init__(self,radius):
        self.radius = radius
        if isinstance(self.radius, str):
            raise RadiusInputError

try:
    a = Circle('Hello')
except RadiusInputError:
    print("'Hello' is not a number.")

这按预期工作,其余代码没问题,只需更改类型检查即可。

class CustomError(Exception):
    pass

class Circle:
    def __init__(self,radius):
        self.radius=radius
        result = isinstance(self.radius, str)
        if result == True:
            raise CustomError

try:
    a = Circle('Hello')
except CustomError:
    print("'Hello' is not a number.")

检查您创建的对象的数据类型,并尝试按以下格式编写:

class RadiusInputError(Exception):
    pass

class Circle:
    def __init__(self,radius):
        self.radius=radius
        try:
            if not isinstance(self.radius, int):
                    raise RadiusInputError
        except RadiusInputError:
            print("'hello' is not a number.")

a = Circle('hello')