Не удается найти скрипт Python из сообщения об ошибке - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь проследить происхождение сообщения об ошибке Python, которое я получаю, когда пытаюсь запустить свой код test.py.

Модуль (который вызывается test.py), которым я являюсьпопытка отследить от вывода ошибки, по-видимому:

build/bdist.linux-x86_64/egg/george/gp.py

Фрагмент сообщения об ошибке:

File "build/bdist.linux-x86_64/egg/george/gp.py", line 498, in
    predict
  1. Я могу найти build/bdist.linux-x86_64/, но он пуст.Может быть, это не то, что нужно.
  2. Я также нашел другую версию gp.py, но когда я вносил в нее изменения, ничего не происходило, поэтому test.py не вызывает эту версию.

Все, что я хочу сделать, - это найти код, в котором происходит ошибка, чтобы я мог добавить к нему еще несколько выводов, чтобы выяснить, что происходит не так.


Здесьэто сообщение об ошибке:

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

Очевидно, что в какой-то момент я передаю массив, содержащий infs или NaN, в какой-то скучный или непонятный код, который ему не нравится.Но чтобы понять, почему значения в первую очередь равны infs или NaN, кажется, что в модуле predict происходит все, что идет не так.

(gp1 - это класс, который также определен в gp.py код!)

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете увидеть, какой файл действительно загружен, используя атрибут .__file__ в модуле или вызвав inspect.getfile().

Ваш пример не упоминает, но вы, вероятно, импортируете gp или gp1 в вашем test.py.Вы можете попробовать:

import gp
import inspect

print(gp.__file__)
print(inspect.getfile(gp))

Обе строки должны показать вам, какой файл был фактически загружен с точки зрения Python, и позволить вам отследить файл с проблемой.

0 голосов
/ 13 декабря 2018

Python сохраняет путь к исходному файлу в байтово-скомпилированных версиях модулей при компиляции их в байтовый код Python.Эти скомпилированные версии обычно генерируются «на лету» и автоматически используются повторно.

Ваша программа непреднамеренно использует файл gp.pyc где-то в дереве, который был скомпилирован из gp.py в пути build/..., который вы видите.Обычно build/ используется только при сборке пакетов.Я подозреваю, что вы как-то напутали при сборке george egg.

Проверьте наличие .pyc файлов в вашем пути Python и удалите их.Они будут перестроены автоматически (если найдены настоящие .py файлы).

Например, из вашей директории проекта:

$ find . -name `*.pyc` -exec rm {} \;
...