Использование try-excepts во вложенных циклах for - PullRequest
1 голос
/ 13 мая 2019

У меня есть вложенный цикл, в котором я выполняю вычисления для каждой точки сетки в 3-мерном массиве.Некоторые из этих точек сетки вызывают ошибку.Я хочу рассчитать каждую возможную точку сетки и пропустить те, которые вызывают ошибку.

Я пробовал:

with sharedmem.MapReduce(np=45) as pool:
  def calc_func(abc):
    for k in range(241):
      try:
        for j in range(int(datetime_range)):
            for l in range((abc), abc+1):  
              value = calc(pr[j,k,l], te[j,k,l], de[j,k,l])
              array[j,k,l] = value
      except (IndexError, ValueError):
        continue
  pool.map(cape_func, range(0, 479))

^ Выше, некоторые точки сетки рассчитываются, но я думаю,когда значения k попадают в исключение, код не рассчитывает оставшиеся точки сетки для этого k.

Ниже я попытался добавить еще один блок try-исключения для итерации по всей сетке.точки.Я не думаю, что это сработало - кажется, что оно зацикливается бесконечно.

with sharedmem.MapReduce(np=45) as pool:
  def calc_func(abc):
    for k in range(241):
      try:
        for j in range(int(datetime_range)):
          try:
             for l in range((abc), abc+1):  
               value = calc(pr[j,k,l], te[j,k,l], de[j,k,l])
               array[j,k,l] = value
          except (IndexError, ValueError):
            continue
      except (IndexError, ValueError):
        continue
  pool.map(cape_func, range(0, 479))

1 Ответ

1 голос
/ 16 мая 2019

Я думаю, что вы, возможно, ищете оператор pass вместо continue.Но я, возможно, не очень хорошо понял ваши вопросы.На примечании стороны, Вы не можете векторизовать это?

Похоже, что единственное, что может выдавать ошибки Index или Value, - это функция calc, поскольку весь ваш цикл находится за пределами диапазона.Почему бы вам просто не обернуть 2 строки кода с помощью назначения функции и массива?

...