6

我在 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

当异常被捕获时,我如何什么都不做。

谢谢。

4

5 回答 5

24

pass是您要查找的关键字。

于 2012-02-11T20:23:28.717 回答
9

让我们正确地编写代码。

  • 我们想要遍历网格的每个单元格。就这样。不要创建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)
)
于 2012-02-11T20:42:31.557 回答
5

您可以使用pass, 但...在 Python 3.x 中也是同义词,这对于编写伪代码非常有用。

我看到很多人pass在他们真正不需要做任何事情的地方使用,同时...在他们使用它的地方用作占位符。

class SomeInterface:
    def do_something(self):
        pass

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

这使得搜索...和查找有未实现代码的区域变得容易,而不会出现来自pass.

请注意,传递异常通常是一种不好的做法,因为您几乎总是希望对异常采取行动。您绝对应该至少指定要捕获的确切异常,否则您将捕获所有异常,如果出现不同的异常,可能会导致您无法检测到的错误。

于 2012-02-11T20:32:02.397 回答
4
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
于 2012-02-11T20:23:12.907 回答
0
result = x if a > b else y

是三元运算符

什么都不做的声明是

pass
于 2012-02-11T20:39:27.503 回答