2016-03-06 124 views
1

所以我正在制作一个点类,我将用它来绘制形状。我创建我的观点,并引发错误开始,如果x和y的值都没有花车:Python - AttributeError:点实例没有属性'x'

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

然后在这个方法中,我以字符串形式转换价值为int。

def __str__(self): 
    return int(round(self.x)) 

的问题是上面的方法,它给我的错误:

AttributeError: Point instance has no attribute 'x' 

然而X应该存在的,所以我不知道为什么它给我的错误。即使我用y表示y不存在。那么为什么这种方法会给我这个错误呢?

回答

2

如果问题中的缩进实际上是正确的,则从不设置xy。该代码指出:

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

如果if计算结果为True,一个将引发异常,并线是不可能达成。如果它的计算结果为False,那么整个程序段不会执行。

您可能意味着这样的:

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

即固定一个问题,但现在我得到另一个错误,即类型错误:__str__返回非字符串(类型为int) –

+1

你真的应该已经打开一个单独的问题在那(它是不相关的),但我想你想'返回str(int ...)'。你的'__str__'方法确实需要返回一个字符串。 –

1

你只是初始化xy只有当你抛出一个错误 - 或从未。

你想要的东西,如:

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