忽略Python中的异常

ris*_*p89 3 python try-except

我在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
Run Code Online (Sandbox Code Playgroud)

如果发现异常,我该怎么办?

谢谢.

sni*_*im2 15

pass 是您要查找的关键字.


Kar*_*tel 8

让我们正确编写代码.

  • 我们想迭代网格的每个单元格.那样做吧.不要创建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)
)
Run Code Online (Sandbox Code Playgroud)

  • 这在概念上并不困难(顺便说一下,编程中的"高级"通常意味着与你认为它的意思相反,尽管这是可以理解的).以这种方式编写代码比显示如何编写代码的方式简单.它需要**少**抽象,因为你没有做的事情就像试图弄清楚这个`range`对象与原始列表有什么关系.那些试图教授编程的人往往会有一些非常奇怪的想法,即什么是简单的,什么是困难的.他们把所有事情都教不通.:( (3认同)
  • @KarlKnechtel:我在try..except语句的`else`子句中放了`return True`.虽然在这种情况下并不重要,但它会以适当的方式教会初学者(只将可能引发异常的代码放入`try`,将异常处理转换为`except`,if-everything-went-好吧进入'其他') (2认同)
  • @KarlKnechtel:我知道编程语言上下文中的高级意味着什么。在之前的评论中,我指的是初学者的“x for i in a for j in b”的复杂性。你的回答很棒。现在,在多次使用 for 循环后,您的方法看起来更干净、更安全、更方便。谢谢。:) (2认同)

Gar*_*tty 5

您可以使用pass, 但...在 Python 3.x 中也是同义词,它非常适合编写伪代码。

我看到很多人pass在他们真正需要什么都不做的...地方使用,而在他们正在使用的地方使用它作为占位符。

class SomeInterface:
    def do_something(self):
        pass

class SomeImplementation(SomeInterface):
    def do_something(self)
        ...
Run Code Online (Sandbox Code Playgroud)

这样可以轻松搜索...和查找您有未实现代码的区域,而不会出现来自pass.

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

  • `...` 不是严格意义上的同义词,尽管它没有任何效果。这是一个赤裸裸的表达方式,就像在那里放置 `None` 或 `0` 或 `"foo"`。`...` 评估为 `Ellipsis` 单例。 (5认同)