在numpy数组元素或行中捕获异常

时间:2018-11-12 13:06:48

标签: python numpy error-handling

我正在对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]

0 个答案:

没有答案