2013-03-14 4 views
0

je reçois des erreurs similaires à ce récemment:IndexError mystérieux

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 

Lorsque la dernière ligne des points de trace au code qui n'existe pas, ou dans les cas précédents a été commenté. Quand j'exécute la dernière fonction (dans func_lib.py), je n'ai jamais le mystérieux IndexError, seulement quand il est appelé depuis le fichier experiments.py. Je cours cela dans pylab python 2.6 W64. Je n'ai pas pu trouver de bogue connu dans les docs iPython ou Pylab à ce sujet.

Comment la ligne 306 pourrait-elle être à l'origine de l'erreur?

+0

Votre code n'est pas synchronisé avec le bytecode. Rechargez votre code correctement. –

+0

Je vois cela chaque fois que je modifie le fichier dans le paquet, mais ne recompile pas. Peut-être existe-t-il un moyen plus approprié de recharger le code, mais ce que je fais est de supprimer 'func_lib.pyc', puis de redémarrer python et de réimporter le module à partir de –

Répondre

3

Votre code n'est pas synchronisé avec le bytecode. Rechargez votre code correctement.

Lorsqu'une exception se produit, le bytecode est inspecté pour un nom de fichier et un linenumber, puis le fichier source est chargé pour afficher la source d'origine pour cette ligne.

Si, toutefois, vous avez modifié la source mais n'avez pas encore redémarré votre processus python (ou rechargé le code dans ipython), les mauvaises lignes sont affichées lorsqu'une exception se produit.

+0

J'ai utilisé% ed puis sauvegardé le code et re-courir. Est-ce que cela ne recharge pas le code correctement? – ABM

+0

Pas toujours; il y a des mises en garde. Voir la [documentation de chargement automatique ipython] (http://ipython.org/ipython-doc/stable/config/extensions/autoreload.html) qui en énumère quelques uns. –

+1

Règle de base: lorsque vos retraits n'ont plus de sens, vous devez redémarrer ipython. :-) –