在Python中忽略异常
我在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
是你需要的关键词。