2010-11-16 75 views
9

我收到錯誤:跟蹤Python的警告/錯誤在numpy的行號,並SciPy的

Warning: invalid value encountered in log 

從Python和我相信錯誤是由numpy的(使用1.5.0版)拋出。但是,由於我在幾個地方調用了「日誌」功能,所以我不確定錯誤來自哪裏。有沒有辦法讓numpy打印產生這個錯誤的行號?

我假設警告是由一個數字的日誌小到可以舍入爲0或更小(負數)引起的。是對的嗎?這些警告的通常來源是什麼?

回答

17

np.seterr(invalid='raise')在你的代碼(之前出錯的log調用) 會導致numpy的引發異常,而不是發出警告的。 這會給你一個回溯錯誤信息,並告訴你Python發生錯誤時執行的行。

0

如果您有權訪問numpy源代碼,那麼您應該能夠找到打印該警告(使用grep等)的行,並編輯相應的文件以強制執行錯誤(例如,使用斷言)傳遞無效值。這會給你一個堆棧跟蹤,指向你的代碼中稱爲日誌的地方,其值不正確。

我在我的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