Python ::捕获异常以遍历列表

问题描述

|| 这是代码,是Euler Project问题11解决方案的一部分:
sum_d = 0
j = 0
while j < 20:
    i = 0
    while i < 20:
        try:
            sum_d = grid[j][i] * grid[j+1][i+1] * grid[j+2][i+2] * grid[j+3][i+3]
            if sum_d > result:
                result = sum_d
        except IndexError:
            pass
        i += 1
    j += 1
我的问题是捕获这些异常是否被视为代码异味?我可以看到调试这样的代码会更困难(例如,我不小心循环了19个项目而不是20个项目,将很难跟踪),但是比起编码“ 1”要优雅得多 在循环检查。 附言我已经解决了这个问题,我在说代码风格     

解决方法

        剧透:这是我的问题11解决方案的一部分。
for x in range(0,16):
    for y in range(0,16):
        prod = p[y][x] * p[y+1][x+1] * p[y+2][x+2] * p[y+3][x+3]
        m = max(m,prod)
用异常代替基本控制结构总是不好的主意。这次您可以绕开数字0..15! 另外,如果您多加添花,您会得到一个产品,而不是总和。 ;)     ,        你至少可以做到
except IndexError:
    break
无论如何,是的,我相信这是代码的味道,不,它不比
for i in range(gridsize - num_items_in_product):