web-dev-qa-db-fra.com

Impossible de localiser un script python à partir d'un message d'erreur

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
  1. Je peux trouver build/bdist.linux-x86_64/ mais il est vide. Peut-être que ce n'est pas le «bon».
  2. J'ai également trouvé une version différente de 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!)

6
user1551817

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 {} \;
4
fpbhb

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.

1
Grismar