在Python中实现一个点类

时间:2016-03-03 21:23:08

标签: python error-handling point

所以我试图实现一个创建一个点然后旋转,缩放和平移点的点类。这是我目前所写的内容。

class Point:
    '''
        Create a Point instance from x and y.
    '''
    def __init__(self, x, y):
        self.x = 0
        self.y = 0

    '''
        Rotate counterclockwise, by a radians, about the origin.
    '''
    def rotate(self, a):
        self.x0 = math.cos(this.a) * self.x - math.sin(this.a) * self.y
        self.y0 = math.sin(this.a) * self.x + math.cos(this.a) * self.y

    '''

        Scale point by factor f, about the origin.
    Exceptions
        Raise Error if f is not of type float.
    '''
    def scale(self, f):
        self.x0 = f * self.x
        self.y0 = f * self.y

    '''
        Translate point by delta_x and delta_y.
    Exceptions
        Raise Error if delta_x, delta_y are not of type float.
    '''
    def translate(self, delta_x, delta_y):
        self.x0 = self.x + delta_x
        self.y0 = self.y + delta_y

    '''
        Round and convert to int in string form.
    '''
    def __str__(self):
        return int(round(self.x))

此代码中的某些内容正在生成错误。现在我还没有实现错误捕获,我在顶部有一个错误方法

class Error(Exception):
    def __init__(self, message):
        self.message = message

但是,如果某个变量不是float类型,我怎么能捕获错误?

这是我使用的if语句之一:

def __init__(self, x, y):
        if not isinstance(x, float):
            raise Error ("Parameter \"x\" illegal.")        
            self.x = x
            self.y = y
        if not isinstance(y, float):
            raise Error ("Parameter \"y\" illegal.")
            self.x = x
            self.y = y

但这让我有一个缩进错误。那么我怎样才能打印出一条错误消息,说明究竟哪个变量导致了问题呢?

2 个答案:

答案 0 :(得分:1)

如果要引发异常,请在Point的初始值设定项中执行:

def __init__(self, x, y):
    if not isinstance(x, float) or not isinstance(y, float):
        raise Error("Point's coordinates must be floats.")
    self.x = x
    self.y = y

或将坐标转换为float:

def __init__(self, x, y):
    self.x = float(x)
    self.y = float(y)

答案 1 :(得分:0)

如果变量不是浮点数,则会出现TypeError。你可以像这样“抓住”这些错误;

try:
    pass # your stuff here.
except e as TypeError:
    print e # this means a type error has occurred, type is not correct.

另外,这一点值得阅读,以便在断言时检查正确的类型; https://wiki.python.org/moin/UsingAssertionsEffectively