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() 方法
另一种忽略异常的最佳方法是使用 suppress() 方法,而不是使用 try/except 块。这个方法属于 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”关键字简单地忽略它。