2016-03-03 4 views
-3

Итак, я пытаюсь реализовать класс точек, который создает точку, а затем вращает, масштабирует и переводит точку. Вот что я сейчас написал.Реализация класса точек в Python

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 

Но как бы я поймать ошибку, если определенная переменная не типа поплавка?

Вот один из утверждений, если я использую:

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

«Что-то в этом коде генерируется ошибка. " Что порождает ошибку? (Подсказка: сообщение об ошибке сообщает вам.) – kindall

+2

Не должно 'self.x = 0' быть' self.x = x' и 'self.y = 0' быть' self.y = y'? – alecxe

+0

Ошибка говорит " Traceback (самый последний вызов последнего): Файл "test_A.py", строка 17, в печати точки (0.0,1.0) TypeError: __str__ вернулся нестроковый (тип INT) " –

ответ

0

Если переменная не является поплавком, вы получите TypeError. В значительной степени вы можете «поймать» эту ошибку, как это;

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

Кроме того, это было бы полезно прочитать для проверки правильных типов в начале с помощью assert; https://wiki.python.org/moin/UsingAssertionsEffectively

1

Если вы хотите поднять исключение, сделать это в инициализаторе в Поинт:

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 

Или преобразовать координаты плавать:

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

Я использовал здесь класс Error, потому что вы упомянули, что вы его определили, но, вероятно, это должно быть более конкретным. Исключение – Karol

+0

Если self.x = x и self.y = y находятся внутри отступа, потому что я продолжаю получать ошибку с этой строкой. –

+0

@DavidRolfe: self.x = x и self.y = y должно быть на уровне, если не ... – Karol

Смежные вопросы