2016-03-06 97 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 
相關問題