2017-08-15 45 views
-2

考虑一个Circle类,用于表示圆形对象。 Circle类的实例将具有称为半径的属性,其指示圆的大小。此类的构造方法(例如init)将照常初始化此属性。使用'try','raise','except'函数编写一个短程序

显然,这没有任何意义了Circle对象为具有的尺寸小于或等于0

如果有人试图创建一个具有负或零半径的圆的对象,那么你就应该提高一个ValueError类型的异常。该ValueError异常对象应具有以下字符串创建:

半径不得小于或等于0

此外,如果有人试图创建一个非整数值半径的圆的对象,那么你应该引发TypeError类型的异常。的对象ValueError错误应与以下字符串创建:

半径必须是一个整数值

定义有防止圆对象与一个无效的半径创建的构造方法的Circle类。这个类的再版STR函数应返回以下字符串:

圈(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 =圈(-100),结果应该是:

Error: Radius must not be less than or equal to 0 

然而,部分“def init(self,x)”不正确。 有人可以帮忙吗?! 谢谢!

+1

你似乎并不有一个Circle类的任何地方。 – user2357112

回答

2

你的代码中有一些错误:

首先,你说你想要一个“Circle类”,但你实际上并没有定义一个。 您必须创建一个类Circle并将其内部的__init__移动。

其次,这条线是不正确的:

elif x != int or x != float: 

我相信在这里你的目的是要确保x或者是浮动或整数,如果它不是引发错误。但是,写入方式中,两个条件之一将始终为真:x是一个整数,因此x != float为True,x为浮点数,因此x != int为True,或者x既不是这样,它们都是True。

修改elif的语句,像这样:

elif not isinstance(x, (int, float)): 

第三,你可能需要切换,如果和ELIF的顺序,否则经过任何非数值来构造将导致<=抛出例外。

最后,你可以把那两个except s转换之一:

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)) 
+2

您可以缩短'elif not(isinstance(x,int)或isinstance(x,float)):'来简化elif不是isinstance(x,(int,float))'。 'isinstance'可以接受一个类型参数的元组来测试它的第一个参数。 –

+0

@ChristianDean谢谢你的提示样的先生。我编辑了我的答案。 – stybl

相关问题