我有一個表達式對於某些參數值溢出。在這種情況下,我得出了使用筆和紙的漸近結果,而當我遇到這種情況時,我只是用我的分析表達式來代替。如何檢查數值溢出而不在Python中發出警告?
目前我的代碼確實是這樣的:
values = ExpressionThatOverFlows()
# Check the ones that overflow
indOverFlow = isnan(values)
# Set them to the values I derived by pen and paper
values[indOverFlow] = derivedValues
我的問題是,I/O與爆炸「警告」。我知道它警告我很好,但我已經明確照顧它,所以我想讓它們沉默。請注意,我不想讓所有類型的「溢出」警告消失,只有這裏的警告。我認爲,像這樣的工作,但事實並非如此:
try:
values = ExpressionThatOverFlows()
except Warning:
pass
# and the rest of the code as it is
我身邊有檢查,但我只是似乎找到了如何壓制這些警告整個會話或永遠,但是這是爲我指出了不我想要的是。
感謝您的幫助,非常感謝。
編輯:這裏來生成這個問題我已經小得多代碼:
from scipy import log1p, exp
from numpy import array, isnan
a = array([0.2222, 500.3, 0.3, 700.8, 0.111])
values = log1p(-exp(-exp(10**a - 9**a)))
print values # Note the nan's
indOverflow = isnan(values)
values[indOverflow] = 0
注意我是如何「手動」解決問題在最後,但在我發生了什麼/ O是:
Warning: overflow encountered in power
Warning: overflow encountered in power
Warning: invalid value encountered in subtract
我做這樣一個循環計算的,所以我想沉默這些消息(因爲它們已經被固定,而且他們採取了很多的時間進行打印)
如果您發佈的代碼實際上會顯示您詢問的問題,而不是用佔位符替換它,通常會有所幫助。它使讀者擺脫了自己的榜樣。 – Marcin 2012-02-19 13:21:25
嘗試捕捉(除了)「ArithmeticError」異常。 – gimel 2012-02-19 13:29:09
@Marcin:它發生在一個非常複雜的代碼之間,有幾個被定義的對象。但是你是對的,我會舉一個小例子來展示我所追求的。謝謝 – matiasq 2012-02-19 13:33:42