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

时间:2011-06-25 16:26:00

标签: python exception

以下是代码,是problem 11 in Euler Project解决方案的一部分:

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个,它会更难追踪)但是它更优雅,比如编码i < (GRID_WIDTH - NUM_ITEMS_IN_PRODUCT) 在循环检查。

P.S。我已经解决了问题,我在谈论代码的风格

2 个答案:

答案 0 :(得分:7)

Spoiler:这是我problem 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来循环播放!

此外,如果你多了一些东西,你得到的是product,而不是sum。 ;)

答案 1 :(得分:1)

你至少可以成功

except IndexError:
    break

无论如何,是的,我相信这是一种代码味道,并且没有比

更清晰
for i in range(gridsize - num_items_in_product):