Python «попробуй - кроме - еще» обрабатывает несколько возможных результатов одновременно - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть функция, которая подходит для одномерного массива данных, но эта функция может завершиться ошибкой, если данные неуместны, и вызовет RuntimeError.

Поскольку мои данные представляют собой двумерный массив, я хочу попробовать ихесли возможно, на обеих осях данных, в противном случае просто запустите их на одной оси, которая не выдает ошибку.

Если я правильно понял обозначение, я пытаюсь myfunc на своих данных в1-я ось, если это не удалось, перейдите ко второй, в противном случае вернитесь к 1-й.Например, для 1-го столбца или строки:

def myfunc(data):
    # some code to do a fit, might crash
    return fit_params

data = np.random.random((5,5))

try:
    results_y = myfunc(data[0,:])

except RuntimeError:
    results_x = myfunc(data[:,0])
    # some math on the results

else:
    results_y = myfunc(data[0,:])
    # some math on the results

Однако в некоторых сценариях он будет работать с обоими без ошибок, и было бы полезно увидеть / сравнить оба результата.Как мне написать этот цикл так, чтобы он выполнял оба, если это возможно, в противном случае просто будет работать тот, который работал?Я подумываю о том, чтобы поместить все это в цикл if или иметь несколько операторов try?

Заранее спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Всего два независимых try..except предложения

try:
    results_y = myfunc(data[0,:])
except RuntimeError:
    pass

try:
    results_x = myfunc(data[:,0])
except RuntimeError:
    pass

Однако делать это не нужно.Все зависит от количества измерений вашего массива, поэтому, вероятно, было бы лучше проверить my_array.ndim или my_array.shape, чтобы решить, что делать.

...