Я выполняю построчную операцию над массивом 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]