Отслеживание предупреждений/ошибок Python по номеру строки в numpy и scipy

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

Warning: invalid value encountered in log

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

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


person Community    schedule 16.11.2010    source источник


Ответы (2)


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

person unutbu    schedule 16.11.2010

Если у вас есть доступ к исходному коду numpy, вы сможете найти строку, которая выводит это предупреждение (с помощью 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
person mpenkov    schedule 16.11.2010