2013-03-14 204 views
0

我已經得到類似這樣的錯誤最近:神祕IndexError

IndexError        Traceback (most recent call last) 
<ipython-input-124-59ca523b1b36> in <module>() 
----> 1 first_experiment_comb(model) 

    c:\python26\26664\lib\site-packages\experiments.py in first_experiment_comb(mod 
l) 
    172      "Number NZ: " + str(modelz[j].NumNZs) +"\n") 
    173 
--> 174   first_experiment(modelz[j], str(j)) 
    175 
    176 

c:\python26\26664\lib\site-packages\experiments.py in first_experiment(model, e 
t) 
    89   plt.close() 
    90 
---> 91  fl.timberFlow(model) 
    92  plt.savefig(dire + "\\timber_flow" +ext+".pdf", bbox_inches = 0) 
    93  plt.close() 

C:\Python26\26664\lib\site-packages\func_lib.py in timberFlow(model) 
    304  if not unVars: 
    305   unVars = varValues(model, 'PIEHTLVOL') 
--> 306 
    307  for i in range(19): 
    308    swVarVals.append(swVars[i].X) 

IndexError: list index out of range 

其中跟蹤點,代碼不存在,或者在以往的案例的最後一行已被註釋掉。當我自己運行最後一個函數(在func_lib.py中)時,我從來沒有得到神祕的IndexError,只有當它從experiments.py中調用時。

我在python python 2.6 W64中運行這個。 我一直無法在iPython或Pylab文檔中發現有關此的已知錯誤。

306行怎麼會成爲錯誤的根?

+0

您的代碼與字節碼不同步。正確地重新加載你的代碼。 – 2013-03-14 21:43:13

+0

無論何時編輯包中的文件,我都會看到這一點,但不要重新編譯。也許有更正確的方式來重新加載代碼,但我做的是,刪除'func_lib.pyc',然後重新啓動python並重新導入模塊這是從 – 2013-03-14 21:45:29

回答

3

您的代碼與字節碼不同步。正確地重新加載你的代碼。

當發生異常時,將檢查字節碼中的文件名和繡線編號,然後加載源文件以顯示該線的原始源。

但是,如果您更改了源代碼但尚未重新啓動您的python進程(或重新加載了ipython中的代碼),那麼當發生異常時將顯示錯誤的行。

+0

我一直使用%ed然後保存代碼並重新運行。這是否不正確地重新加載代碼? – ABM 2013-03-14 21:50:10

+0

並不總是;有警告。請參閱[ipython autoreload文檔](http://ipython.org/ipython-doc/stable/config/extensions/autoreload.html),其中列出了一些。 – 2013-03-14 21:58:18

+1

經驗法則:當你的回溯不再有意義時,你需要重新啓動ipython。 :-) – 2013-03-14 21:58:34