Перехват исключения в элементе массива - PullRequest
0 голосов
/ 12 ноября 2018

Я выполняю построчную операцию над массивом 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...