代码之家  ›  专栏  ›  技术社区  ›  Duncan Alf Zhang

使用“try”、“raise”、“except”函数编写短程序

  •  -2
  • Duncan Alf Zhang  · 技术社区  · 7 年前

    考虑一个用于表示圆对象的圆类。Circle类的实例将具有一个称为radius的属性,该属性指示圆的大小。构造函数方法(例如。

    显然,圆形对象的大小小于或等于0是没有意义的。

    如果有人试图创建半径为负或零的圆对象,则应引发ValueError类型的异常。应使用以下字符串创建ValueError对象:

    半径不得小于或等于0

    此外,如果有人试图创建具有非整数值半径的圆对象,则应引发TypeError类型的异常。应使用以下字符串创建ValueError对象:

    报告 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”部分 (self,x)“不正确。 谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   steliosbl    7 年前

    您的代码有许多错误:

    首先,你说你想要一个“Circle类”,但实际上你并没有定义一个。 Circle 移动你的 __init__

    第二,这一行不正确:

    elif x != int or x != float:
    

    我想你在这里的目的是确保 x 是浮点或整数,如果不是,则引发错误。然而,按照编写方式,这两个条件中的一个始终为真:或者 x x != float 是真的, 浮子是这样的吗 x != int 是真的,或 两者都不是,所以它们都是真的。

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