В таких случаях обычно требуется функция-оболочка.
Например, у вас есть несколько строк, которые выглядят так:
self.w[i0-1][j0+1] += 3
Единственное отличие от одной строки к следующей - это два индекса и значение приращения.Итак, давайте напишем метод, который принимает эти три вещи в качестве параметров:
def _inc(self, i, j, diff):
try:
self.w[i][j] += diff
except:
pass
И теперь каждую из этих строк можно изменить на:
self._inc(i0-1, j0+1, 3)
… и это будетто, что вы хотели: увеличивать все, что не вызывает исключения, ничего не делать, когда оно делает.
Но, пока мы работаем над этим, вам, вероятно, здесь не нужен голый except
.Вместо этого вы хотите защититься только от конкретного исключения, которое вы ожидали.Это, вероятно, IndexError
.
. Хорошая особенность функции-обертки в том, что нам нужно всего лишь изменить вещи в одном месте вместо 78 мест:
def _inc(self, i, j, diff):
try:
self.w[i][j] += diff
except IndexError:
pass
И аналогично, еслиВы хотели изменить вещи так, чтобы они вызывали log.debug
каждый раз, когда возникает исключение, вы просто заменяете это pass
.
Или, если вы хотите предварительно или пост-проверить это 0 <= i < len(self.w) and 0 <= j < len(self.w[i])
.(И вы можете захотеть этого - обратите внимание, что если self.w
является списком списков, когда i0
равно 0, i0-1
равно -1
, что не повысит IndexError
, оно будет увеличиватьсяпоследний ряд…)