如何在Python中忽略异常并继续执行?


异常是在程序执行过程中发生的意外错误或事件。程序中错误和异常的区别在于,遇到异常时,程序会偏离其原始执行路径,而发生错误时,程序会终止。因此,与错误不同,异常是可以处理的。所以,你的程序不会崩溃。

但是,在某些Python情况下,异常可能不会导致程序终止,并且不会很大程度地影响执行方向。因此,最好忽略此类异常。有几种方法可以做到这一点。

  • 使用try/except块

  • 使用suppress()方法

使用try/except块

Try/except块允许你执行代码并使用“pass”语句跳过发生的任何错误。这实际上什么也不做,但它会忽略发生的任何错误。下面可以看到此语句的语法。

try:
   code to be executed that may cause an exception
except:
   pass

你也可以通过使用except语句后跟特定异常来忽略特定异常。例如,要忽略AttributeError异常,可以使用以下代码

try:
   # lines of code
except AttributeError:
   pass

如果要忽略所有异常,可以使用以下代码:

try:
   # lines of code
except Exception:
   pass

示例

在下面的示例中,让我们对整数迭代地执行除法运算。使用for循环,我们将0-5范围内的一个整数对象进行除法运算;但是零除法是不可能的,程序将引发ZeroDivisionError。此异常使用“pass”语句被忽略,并执行接下来的迭代。

a = 16
for i in range(5):
    try:
        print(a/i)
    except:
        pass

输出

上面程序的输出如下所示。程序忽略第一次迭代,因为第一次除法是零除法。

16.0
8.0
5.333333333333333
4.0

使用suppress()方法

另一种忽略异常的最佳方法,而不是使用try/except块,是使用suppress()方法。此方法属于Python中的contextlib模块。

但是,与try/except块不同,如果在此上下文内引发异常,则Python解释器将抑制其中的所有代码行。让我们看一些例子来更好地理解这一点。

示例

在这个例子中,我们尝试使用suppress()方法抑制/忽略零除法错误。

import contextlib
a = 16
with contextlib.suppress(ZeroDivisionError):
    div = a/0
print("Zero division error is suppressed")

输出

上面程序的输出将如下产生:

Zero division error is suppressed

示例

即使suppress()方法上下文中的单行代码引发异常,此块中包含的其他行也不会执行。这是此方法的唯一缺点。让我们看一个演示相同的示例。

import contextlib
a = 16
with contextlib.suppress(Exception):
    for i in range(5):
        print(a/i)
print("The entire loop is not displayed")

输出

执行上面的程序后,即使循环只有一次迭代引发异常,输出也只会显示上下文之外的语句:

The entire loop is not displayed

结论

在Python中,你可以使用“try...except”结构忽略异常并继续处理。如果发生异常,“except”块将被执行,你可以相应地处理异常。如果你不想处理异常,可以使用“pass”关键字简单地忽略它。

更新于:2023年2月22日

3万+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告