Отслеживание предупреждений / ошибок Python по номеру строки в numpy и scipy - PullRequest
11 голосов
/ 16 ноября 2010

Я получаю сообщение об ошибке:

Warning: invalid value encountered in log

Из Python и считаю, что ошибка выдается numpy (используется версия 1.5.0).Однако, поскольку я вызываю функцию «log» в нескольких местах, я не уверен, откуда исходит ошибка.Есть ли способ получить NumPy, чтобы напечатать номер строки, которая сгенерировала эту ошибку?

Я предполагаю, что предупреждение вызвано регистрацией числа, которое достаточно мало для округления до 0 или меньше (отрицательно).Это правильно?Каково обычное происхождение этих предупреждений?

Ответы [ 2 ]

19 голосов
/ 16 ноября 2010

Ввод np.seterr(invalid='raise') в ваш код (перед ошибочным log вызовом) приведет к тому, что numpy вызовет исключение вместо выдачи предупреждения. Это даст вам сообщение об ошибке трассировки и сообщит вам строку, которую Python выполнял при возникновении ошибки.

0 голосов
/ 16 ноября 2010

Если у вас есть доступ к пустому источнику, вы сможете найти строку, которая печатает это предупреждение (используя grep и т. Д.), И отредактировать соответствующий файл, чтобы вызвать ошибку (например, с помощью утверждения), когда недопустимый значение передается. Это даст вам трассировку стека, указывающую на место в вашем коде, которое вызвало log с неправильным значением.

Я кратко посмотрел в своем numpy источнике и не смог найти ничего, что соответствует описанному вами предупреждению (хотя моя версия numpy старше вашей).

>>> import numpy
>>> numpy.log(0)
-inf
>>> numpy.__version__
'1.3.0'

Возможно ли, что вы вызываете какую-то другую функцию журнала, которая не в numpy? Например, вот тот, который на самом деле выдает исключение при неправильном вводе.

>>> import math
>>> math.log(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...