在Python中忽略异常

8 投票
5 回答
25003 浏览
提问于 2025-04-17 12:51

我在Python里有一个try-except块,我想在出现错误的时候什么都不做。我的代码如下:

for i in range(len(grid)):
    for j in range(len(grid[i])):
        try:
            count = count > int(grid[i][j]) ? count : int(grid[i][j])
        except:
            //Do nothing here

我该怎么做才能在捕获到错误时不做任何事情呢?

谢谢。

5 个回答

5

你可以使用 pass,但在 Python 3.x 中,... 也是可以用的,这在写伪代码时会很方便。

我看到很多人用 pass 来表示真的什么都不做,而用 ... 来当作占位符。

class SomeInterface:
    def do_something(self):
        pass

class SomeImplementation(SomeInterface):
    def do_something(self)
        ...

这样一来,你可以很容易地搜索 ...,找到那些你还没实现的代码,而不会被 pass 混淆。

需要注意的是,忽略异常通常是个坏习惯,因为你几乎总是需要对异常采取行动。至少,你应该明确指定你想捕获的具体异常,否则你会捕获所有异常,这可能会导致一些你无法发现的错误,特别是当其他异常出现时。

10

让我们把代码写得更规范一些。

  • 我们想要遍历网格中的每一个单元格。所以就这样做。不要创建数字列表(range)来遍历,然后再用这些数字去索引。Python的for循环可以直接和容器一起使用,这样既方便又容易理解,非常好。不要去反对这个。

  • Python中没有类似于?:的结构。虽然有一个x if y else z的写法,但在这里不适合。你显然是想把count设置为它当前值和单元格值中的最大值。对此有一个内置函数可以使用。

  • 你真正想要的是所有单元格中的最大值。所以直接请求这个;不要以为你必须自己实现高水位算法。其实你不需要这样做。(这也可以避免你需要为count选择一个初始值,而这个值可能是错误的。)我们不需要用显式的循环来遍历。我们可以用生成器表达式来指定传给max的值列表。

  • 你想要“忽略”那些无法转换为整数的值。尽管如果这些值真的存在,你的其他代码可能就有问题:我们可以简单地进行测试,过滤掉那些不符合条件的值。

因此:

def is_integral(value):
    try:
        int(value)
        return True
    except:
        return False


# Now, get the maximum of all the integral values:
count = max(
    int(cell) for row in grid for cell in row
    if is_integral(cell)
)
27

pass 是你需要的关键词。

撰写回答