Я создаю простую программу, которая работает с использованием окрестности Мура. Поэтому, учитывая сетку, строку и столбец, она должна возвращать количество ячеек в окрестности позиции, которая содержит 1. Она работает, за исключением случаев, когда задана позиция на краю сетки. Поскольку он проверяет все окружающие его сетки, он бросает IndexError, когда он пытается проверить позицию за пределами сетки. То, что я хочу, это просто игнорировать его, не останавливаясь, бросая ошибку или манипулируя моими результатами, и переходите к следующему. Но я не уверен, как, я попытался сделать исключение в IndexError, но он выходит из цикла после его обнаружения.Как я могу продолжить цикл обработки исключений?
def count_neighbours(grid, row, col):
count = 0
pos = grid[row][col]
try:
for cell in [grid[row+1][col], #(0,-1) All relative to pos
grid[row-1][col], #(0,1)
grid[row+1][col+1], #(1,-1)
grid[row+1][col-1], #(-1,-1)
grid[row][col-1], #(-1,0)
grid[row][col+1], #(1,0)
grid[row-1][col+1], #(1,-1)
grid[row-1][col-1]]: #(-1,1)
if cell == 1:
count += 1
except IndexError:
pass
return count
assert count_neighbours(((1, 1, 1),
(1, 1, 1),
(1, 1, 1),), 0, 2) == 3
Что делать, если я должен был сделать проверку индексов каждой ячейки, и если он Безразлично 't бросать исключение, я добавляю его в список допустимых ячеек? Затем пропустите этот список и проверьте значение? – Jordan
Независимо от того, что еще не так с вашим кодом, обратите внимание, что 'IndexError' _won't_ будет сгенерирован для рассчитанных отрицательных значений 'row ± 1' и' col ± 1', потому что Python позволяет индексы меньше нуля (они обертываются, т. Е. они интерпретируются как значения len (object) + index'). – martineau
P.S. Относительно простое решение проблемы с отрицательными индексами заключалось бы в том, чтобы добавить пустую строку и столбец в вашу «сетку» и использовать индексирование на основе 1 для параметров строки «row» и «col», переданных функции. Таким образом, рассчитанные наименьшие значения смещения будут равны нулю для всех допустимых значений позиции 'row, col', поскольку они всегда будут относиться к пустым ячейкам и поэтому не будут учитываться. – martineau