我正在对numpy数组执行逐行操作。如何捕获可能的异常,以便仍然可以获取其他有效行?
作为一个例子,我将取数组行的总和,并将其除以该行的第一个或第二个元素。如果我捕获到创建的ZeroDivisionError并尝试将其替换为数字零,则会替换整个数组。我只希望替换例外元素。
实际功能有所不同,实际错误是OverflowError,这只是出于说明目的。
import numpy as np
c = np.array([[1,2,3],[0, 4, 5]])
def catch(func, handle=lambda e : e, *args, **kwargs):
with np.errstate(divide='raise'):
try:
return func(*args, **kwargs)
except Exception as e:
return 0
#divide by second column
def div_arr1(x):
ans = catch(lambda : np.sum(x, axis = 1) / x[:,1] )
return ans
#divide by first column, create ZeroDivisionError
def div_arr0(x):
ans = catch(lambda : np.sum(x, axis = 1) / x[:,0] )
return ans
foo = div_arr1(c)
bar = div_arr0(c) #ZeroDivisionError
print('Divide by second column:' , foo)
print('Divide by first column:' , bar, ' , expected: [6. 0]')
#output
#Divide by second column: [3. 2.25]
#Divide by first column: 0 , expected: [6. 0]