使用'try'、'raise'、'except'函数编写一个小程序
Use 'try', 'raise', 'except' function to write a short program
考虑一个用于表示圆形对象的圆 class。 Circle class 的实例将有一个名为 radius 的属性,它指示圆的大小。此 class 的构造函数方法(例如 init)将像往常一样初始化此属性。
显然,Circle 对象的大小小于或等于 0 是没有意义的。
如果有人试图创建具有负半径或零半径的 Circle 对象,那么您应该引发 ValueError 类型的异常。应使用以下字符串创建 ValueError 对象:
半径不得小于或等于 0
此外,如果有人试图创建一个具有非整数值半径的 Circle 对象,那么您应该引发 TypeError 类型的异常。应使用以下字符串创建 ValueError 对象:
半径必须是整数值
使用构造方法定义一个 Circle class,以防止使用无效半径创建 Circle 对象。此 class 的 repr 和 str 函数应 return 以下字符串:
圆(x)
其中 x 是圆的半径。
例如:
def main():
try:
c = Circle(10)
except ValueError as x:
print("Error: " + str(x))
else:
print(c)
def __init__(self, x):
try:
if x <= 0:
raise ValueError('Radius must not be less than or equal to 0')
elif x != int or x != float:
raise TypeError('Radius must be an integer value')
except ValueError as x:
print('Error: {0}'.format(x))
except TypeError as x:
print('Error: {0}'.format(x))
main()
结果应该是:
Circle(10)
如果c = Circle(-100),结果应该是:
Error: Radius must not be less than or equal to 0
但是,"def init(self, x)"的部分是不正确的。
有人可以帮忙吗?
谢谢!
您的代码有几个错误:
首先,你说你想要一个 "Circle class",但你实际上并没有定义一个。
您必须创建一个 class Circle
并将您的 __init__
移到其中。
其次,这行是不正确的:
elif x != int or x != float:
我假设您的目的是确保 x
是浮点数或整数,如果不是,则引发错误。但是,按照这种写法,两个条件之一将始终为真:x
是整数所以 x != float
是真,x
是浮点数所以 x != int
是 True,或者 x
两者都不是,所以它们都是 True。
像这样修改 elif 语句:
elif not isinstance(x, (int, float)):
第三,你可能需要调换 if 和 elif 的顺序,否则将任何非数值传递给构造函数都会导致 <=
抛出异常。
最后,您可以将这两个 except
合二为一:
except (ValueError, TypeError) as x:
因此最终结果将是:
class Circle:
def __init__(self, x):
try:
if not isinstance(x, (int, float)):
raise TypeError('Radius must be an integer value')
elif x <= 0:
raise ValueError('Radius must not be less than or equal to 0')
except (ValueError, TypeError) as x:
print('Error: {0}'.format(x))
考虑一个用于表示圆形对象的圆 class。 Circle class 的实例将有一个名为 radius 的属性,它指示圆的大小。此 class 的构造函数方法(例如 init)将像往常一样初始化此属性。
显然,Circle 对象的大小小于或等于 0 是没有意义的。
如果有人试图创建具有负半径或零半径的 Circle 对象,那么您应该引发 ValueError 类型的异常。应使用以下字符串创建 ValueError 对象:
半径不得小于或等于 0
此外,如果有人试图创建一个具有非整数值半径的 Circle 对象,那么您应该引发 TypeError 类型的异常。应使用以下字符串创建 ValueError 对象:
半径必须是整数值
使用构造方法定义一个 Circle class,以防止使用无效半径创建 Circle 对象。此 class 的 repr 和 str 函数应 return 以下字符串:
圆(x)
其中 x 是圆的半径。
例如:
def main():
try:
c = Circle(10)
except ValueError as x:
print("Error: " + str(x))
else:
print(c)
def __init__(self, x):
try:
if x <= 0:
raise ValueError('Radius must not be less than or equal to 0')
elif x != int or x != float:
raise TypeError('Radius must be an integer value')
except ValueError as x:
print('Error: {0}'.format(x))
except TypeError as x:
print('Error: {0}'.format(x))
main()
结果应该是:
Circle(10)
如果c = Circle(-100),结果应该是:
Error: Radius must not be less than or equal to 0
但是,"def init(self, x)"的部分是不正确的。 有人可以帮忙吗? 谢谢!
您的代码有几个错误:
首先,你说你想要一个 "Circle class",但你实际上并没有定义一个。
您必须创建一个 class Circle
并将您的 __init__
移到其中。
其次,这行是不正确的:
elif x != int or x != float:
我假设您的目的是确保 x
是浮点数或整数,如果不是,则引发错误。但是,按照这种写法,两个条件之一将始终为真:x
是整数所以 x != float
是真,x
是浮点数所以 x != int
是 True,或者 x
两者都不是,所以它们都是 True。
像这样修改 elif 语句:
elif not isinstance(x, (int, float)):
第三,你可能需要调换 if 和 elif 的顺序,否则将任何非数值传递给构造函数都会导致 <=
抛出异常。
最后,您可以将这两个 except
合二为一:
except (ValueError, TypeError) as x:
因此最终结果将是:
class Circle:
def __init__(self, x):
try:
if not isinstance(x, (int, float)):
raise TypeError('Radius must be an integer value')
elif x <= 0:
raise ValueError('Radius must not be less than or equal to 0')
except (ValueError, TypeError) as x:
print('Error: {0}'.format(x))