2015-06-30 87 views
-2

此代碼太長,無法發佈整個事情,所以希望問題只是包含在這個循環中,但我真的很困惑什麼是這裏錯了。我有這樣的循環:TypeError:不支持的操作數類型爲 - :'instance'和'float'

if index == 1: 
     mag_diffs = [] 
     counter = 0 

     while (image_objects[counter].magr_value > -6.0) and (image_objects[counter].magr_value < -4.0) and (counter < 5): 
      mag_diff = (image_objects[counter].magr_value - new_s_objects[counter].magr) 
      print 'mag_diff is:' 
      print mag_diff 
      mag_diffs.append(mag_diff) 
      counter +=1 


     mag_diffs.sort() 
     mag_offset = np.median(mag_diffs) 

,並在後面的代碼當我嘗試在這裏調用它,它運行到一個錯誤:

sextractor_mr.append((new_s_objects[index].magr + mag_offset)) 

它給出了這樣的錯誤:

Traceback (most recent call last): 
    File "sextractor_reader.py", line 272, in <module> 
    sextractor_mr.append((new_s_objects[index].magr + mag_offset)) 
IndexError: list index out of range 

但我還發現while循環條件永遠不會被滿足(它應該是五次),所以當我註釋掉while循環並刪除縮進,以便它只是在while循環中執行一次時,我會得到這個呃ror:

Traceback (most recent call last): 
    File "sextractor_reader.py", line 252, in <module> 
    mag_diff = (image_objects[counter].magr_value - new_s_objects[counter].magr) 
TypeError: unsupported operand type(s) for -: 'instance' and 'float' 

我試着查找錯誤消息,並沒有發現任何類似於我的情況。我對班級不太舒服,所以我認爲這與嘗試與班級合作有關。希望這個錯誤包含在我給你的東西里,但代碼真的太長了才能發佈它(比如1000行)。

編輯:好吧這是我的東西在這裏有什麼問題。我印 image_objects [0] .magr_value if語句上面,它返回

<__main__.SDSS_object instance at 0x10bd4d7a0> 

這是不是在所有我想要的東西。我想要一個具有值的浮點數。我以爲那是你怎麼稱呼類。

+3

當代碼*太長而無法發佈整個事物*時,正確的方法不是發佈它的一部分,*希望問題僅包含在此循環中*,但會發布[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+1

第一個錯誤,「索引」超出範圍,超出列表的最高索引或爲負值。請記住,最高索引號比元素數少一個。所以如果你只有一個元素,'index'應該是零。第二個錯誤是因爲你試圖從'magr_value'中減去'magr' - 當你錯過了'_value'時可能是一個錯誤。 – cdarke

+0

好的,我會試試,稍後轉發問題,如果我不明白 – Wilsonwatson

回答

0

你將不得不給我們一些更多的細節給你的具體細節,但我可以解碼你的錯誤信息。它告訴你image_objects[counter].magr_value不是數字類型。這是一些其他類型(特別是instance),不能從中減去數字。就像餘皓指出的那樣,我們需要一個完整的例子來幫助你。

相關問題