J'essaie de tracer l'origine d'un message d'erreur Python que je reçois lorsque j'essaie d'exécuter mon code test.py
.
Le module (appelé par test.py
) que je tente de tracer à partir de la sortie d'erreur est apparemment:
build/bdist.linux-x86_64/Egg/george/gp.py
L'extrait de message d'erreur:
File "build/bdist.linux-x86_64/Egg/george/gp.py", line 498, in
predict
build/bdist.linux-x86_64/
mais il est vide. Peut-être que ce n'est pas le «bon».gp.py
, mais lorsque j'y apporte des modifications, rien ne se produit, donc test.py
n'appelle pas cette version.Tout ce que je veux faire est de trouver le code dans lequel l'erreur se produit afin de pouvoir ajouter quelques sorties supplémentaires afin de déterminer ce qui ne va pas.
Voici le message d'erreur:
Traceback (most recent call last):
File "test.py", line 213, in <module>
mumc, dummy = gp1.predict(residuals, dates, kernel = kernelprime )
File "build/bdist.linux-x86_64/Egg/george/gp.py", line 511, in predict
File "build/bdist.linux-x86_64/Egg/george/solvers/basic.py", line 87, in apply_inverse
File "/home/me/.local/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.py", line 174, in cho_solve
b1 = asarray_chkfinite(b)
File "/home/me/.local/lib/python2.7/site-packages/numpy/lib/function_base.py", line 1219, in asarray_chkfinite
"array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs
Donc, évidemment, à un moment donné sur la ligne, je suis en train d'insérer un tableau contenant infs ou NaN dans un code scipy ou numpy qu'il n'aime pas. Mais pour voir pourquoi les valeurs sont infs ou NaNs en premier lieu, il semble que tout ce qui ne va pas se passe dans le module predict
.
(gp1 est une classe qui est également définie dans le code gp.py
!)
Python stocke le chemin du fichier source dans les versions de modules compilées par octet lors de la compilation de ceux-ci en code octet Python. Ces versions compilées d'octets sont normalement générées «à la volée» et réutilisées automatiquement.
Votre programme utilise par inadvertance un fichier gp.pyc
quelque part dans l'arborescence, qui a été compilé à partir du gp.py
dans le chemin build/...
que vous voyez. Normalement, build/
n'est utilisé que lorsque les packages sont générés. Je soupçonne que vous avez en quelque sorte gâché les choses lors de la construction de george
Egg.
Recherchez les fichiers .pyc
dans votre chemin Python et supprimez-les. Ils seront reconstruits automatiquement (étant donné que les vrais fichiers .py
ont été trouvés).
Par exemple depuis votre répertoire de projet:
$ find . -name `*.pyc` -exec rm {} \;
Vous pouvez voir quel fichier est chargé en utilisant l'attribut .__file__
sur le module ou en appelant inspect.getfile()
.
Votre exemple ne mentionne pas, mais vous êtes probablement en train d'importer gp
ou gp1
dans votre test.py
. Tu pourrais essayer:
import gp
import inspect
print(gp.__file__)
print(inspect.getfile(gp))
Les deux lignes doivent vous montrer quel fichier a été chargé du point de vue de Python et vous permettre de localiser le fichier avec le problème.