当 Python 程序运行时出现错误或异常时,Python 的异常处理机制会使用异常对象来描述错误并在程序中传递它,这时程序通常会终止执行。但是,在某些情况下,我们希望程序出现异常时不会停止执行,而是继续执行下去。本文将介绍如何在 Python 中实现异常处理后不退出的方式。
一、try…except 语句块
要实现在 Python 中处理异常后继续执行,我们可以使用 try…except 语句块。该语句块的语法如下:
try:
# 可能会发生异常的代码块
except:
# 如果发生异常,执行该代码块
我们可以在 try 语句块中编写可能会出现异常的代码,如读取文件、网络连接等操作。如果在 try 语句块中发生了异常,Python 将会跳到 except 代码块中执行。
下面是一个示例代码,如果读取文件时发生异常,将在控制台输出错误信息,并继续执行下面的代码:
try:
with open('file.txt', 'r') as f:
content = f.read()
except IOError as e:
print('Error:', e)
print('程序继续执行...')
二、try…except 多个代码块
我们还可以使用多个 except 代码块处理不同类型的异常。 Python 对异常类型进行了分类,我们可以通过捕捉特定类型的异常来更好地处理异常,避免冗余的异常处理代码。
try:
# 可能会发生异常的代码块
except IOError as e:
# 处理 IOError 类型的异常
print('IOError:', e)
except ValueError as e:
# 处理 ValueError 类型的异常
print('ValueError:', e)
多个 except 代码块的顺序很重要,应该先捕获基础的异常类型后再捕获更具体的异常类型。因为如果捕获更具体的异常类型的代码块放在前面,那么如果发生了更基础的异常,将不会被捕获。
下面是一个包含多个 except 代码块的示例代码:
try:
1 / 0
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
except Exception as e:
print('Error:', e)
print('程序继续执行...')
在上面的代码中,由于除以 0 的操作会发生 ZeroDivisionError 异常,因此首先捕获了该异常类型的代码块。如果没有该代码块,那么 Exception 代码块将会捕捉该异常,但在这种情况下,处理异常的效果可能不同。
以上就是在 Python 中实现异常处理后不退出的方式以及 try…except 语句块的用法。
补充:
实现异常处理后不退出也可以还可以使用 try…except…else 语句块和 try…except…finally 语句块进行控制。但与前面的语句相比,这两种方式不是那么常用。