类python程序中的全局名称错误

时间:2018-10-07 12:02:35

标签: python

定义一个Circle类,其对象以radius为属性初始化。

当输入半径不是数字时,确保对象创建引发RadiusInputError,这是用户定义的异常。

例如:Circle('hello')-> RadiusInputError:'hello'不是数字

以下代码我编写并抛出错误:

班级圈子:

def __init__(self,r):
    self.r=r

    try:
        if  isinstance(r,str):
            raise RadiusInputError("error ")
        else:
            print(r)
    except RadiusInputError as error:
        print(error)

circle("Hello")

错误显示为:RadiusInputError除外,错误为

NameError: global name 'RadiusInputError' is not defined

2 个答案:

答案 0 :(得分:0)

您不能仅使用尚未创建的异常名称。像Python中的所有内容一样,异常是一个对象,使用前必须对其进行定义。

此外,您当前的代码将引发异常,但随后将其捕获。您希望异常冒泡给用户。

import numbers

class RadiusInputError(Exception):
    pass

class Circle:
    def __init__(self, radius):
        if not isinstance(radius, numbers.Number):
            raise RadiusInputError(f'{repr(radius)} is not a number')

        self.radius = radius

Circle('hello') # __main__.RadiusInputError: 'hello' is not a number

答案 1 :(得分:-1)

class RadiusInputError(Exception):
    pass
class circle:
    def __init__(self,r):
        self.r=r
        try:
            if  isinstance(r,str):
                raise RadiusInputError("error ")
            else:
                print(r)

        except RadiusInputError as error:
            print(r+"is not a number")

circle("Hello")