如何在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”关键字简单地忽略它。