numpy.seterrcall#

numpy.seterrcall(func)[原始碼]#

設定浮點錯誤回呼函數或日誌物件。

有兩種方法可以捕捉浮點錯誤訊息。第一種是使用 seterr 將錯誤處理器設定為 ‘call’。然後,使用此函數設定要呼叫的函數。

第二種是使用 seterr 將錯誤處理器設定為 ‘log’。浮點錯誤接著會觸發對所提供物件的 ‘write’ 方法的呼叫。

參數:
func可呼叫函數 f(err, flag) 或具有 write 方法的物件

在浮點錯誤時呼叫的函數(‘call’ 模式),或 ‘write’ 方法用於記錄此類訊息的物件(‘log’ 模式)。

呼叫函數接受兩個參數。第一個是描述錯誤類型的字串(例如 “除以零”、“溢位”、“下溢” 或 “無效值”),第二個是狀態旗標。旗標是一個位元組,其四個最低有效位元指示錯誤類型,為 “divide”、“over”、“under”、“invalid” 之一

[0 0 0 0 divide over under invalid]

換句話說,flags = divide + 2*over + 4*under + 8*invalid

如果提供物件,其 write 方法應接受一個參數,即字串。

回傳值:
h可呼叫函數、日誌實例或 None

舊的錯誤處理器。

另請參閱

seterrgeterrgeterrcall

範例

錯誤時的回呼

>>> def err_handler(type, flag):
...     print("Floating point error (%s), with flag %s" % (type, flag))
...
>>> import numpy as np
>>> orig_handler = np.seterrcall(err_handler)
>>> orig_err = np.seterr(all='call')
>>> np.array([1, 2, 3]) / 0.0
Floating point error (divide by zero), with flag 1
array([inf, inf, inf])
>>> np.seterrcall(orig_handler)
<function err_handler at 0x...>
>>> np.seterr(**orig_err)
{'divide': 'call', 'over': 'call', 'under': 'call', 'invalid': 'call'}

記錄錯誤訊息

>>> class Log:
...     def write(self, msg):
...         print("LOG: %s" % msg)
...
>>> log = Log()
>>> saved_handler = np.seterrcall(log)
>>> save_err = np.seterr(all='log')
>>> np.array([1, 2, 3]) / 0.0
LOG: Warning: divide by zero encountered in divide
array([inf, inf, inf])
>>> np.seterrcall(orig_handler)
<numpy.Log object at 0x...>
>>> np.seterr(**orig_err)
{'divide': 'log', 'over': 'log', 'under': 'log', 'invalid': 'log'}