关于try except:忽略python中的异常

Ignore exception in Python

本问题已经有最佳答案,请猛点这里访问。

我在python中尝试了except块,当发生异常时我不想做任何事情。我的代码如下:

1
2
3
4
5
6
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

当捕获异常时,我如何不执行任何操作。

谢谢。


pass是您要查找的关键字。


让我们正确地编写代码。

  • 我们想遍历网格中的每个单元格。这样做。不要创建重复访问然后用于索引的数字列表(range)。python for循环直接与容器一起工作。它方便易懂,很好用。别跟那个打架。

  • 没有?:用python构造。这里有一个x if y else z构造,但这在这里不合适。显然,您试图将count设置为其当前值和单元值的最大值。它有一个内置的功能。

  • 你真的想要所有这些细胞的最大值。所以直接问这个问题;不要假设你必须自己实现高水位线算法。您不需要(这也保护您不必为count选择初始值,这可能是错误的。)我们不需要为此使用显式循环进行迭代。我们可以使用生成器表达式指定要传递给max的值的列表。

  • 您希望"忽略"不能转换为整数的值。尽管您的其他代码可能有问题,但如果这些值的存在可能首先发生:我们可以简单地进行一个测试,并筛选出未通过测试的值。

因此:

1
2
3
4
5
6
7
8
9
10
11
12
13
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)
)


您可以使用pass,但在python 3.x中,...是同义词,这对于编写psuedocode很有用。

我看到很多人使用pass,他们真正不需要做任何事情,而使用...作为占位符。

1
2
3
4
5
6
7
class SomeInterface:
    def do_something(self):
        pass

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

这使得搜索...和查找没有未实现代码的区域变得容易,而没有pass的误报。

请注意,传递异常通常是一种糟糕的实践,因为您实际上总是希望对异常采取行动。至少,您应该明确地指定要捕获的确切异常,否则您将捕获所有异常,这可能导致无法检测到不同异常是否重新出现的错误。


1
2
3
4
5
6
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:
            pass


1
result = x if a > b else y

是三元运算符

什么都不做的声明是

1
pass