__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'>":
正在比较左侧的 type
和 str
在右侧,永远不会计算为真。检查某物是否为特定类型的方法是使用 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')
我是初学者,正在解决一个问题。如果用字符串参数传递对象,我必须引发异常,但该程序的输出为空白。有人可以帮忙吗?
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'>":
正在比较左侧的 type
和 str
在右侧,永远不会计算为真。检查某物是否为特定类型的方法是使用 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')