捕获特定异常
在上一步中,你了解了 Python 中不同类型的异常。现在,你将学习如何使用 try...except
块捕获特定的异常。这能让你以不同的方式处理不同的错误,使你的代码更健壮。
捕获异常时,最佳实践是尽可能具体。这样可以防止你的 except
块意外捕获到它并非设计用来处理的异常,因为这可能会掩盖错误,增加调试难度。
让我们修改 exceptions_demo.py
脚本,以便在尝试将字符串转换为整数时捕获特定的异常,例如 ValueError
。
- 使用 VS Code 打开
~/project
目录下的 exceptions_demo.py
文件。
- 修改脚本,使其仅在将字符串转换为整数时捕获
ValueError
:
try:
num = int("abc")
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
在这个示例中,我们专门捕获了 int("abc")
失败时发生的 ValueError
。如果 try
块中发生了任何其他异常,它将被 except Exception as e:
块捕获。如果捕获到任何异常,print("Continuing execution...")
语句将始终执行,这表明程序在处理异常后会继续运行。
现在,让我们运行这个脚本:
- 在 VS Code 中打开终端。
- 导航到
~/project
目录:
cd ~/project
- 使用
python
命令运行 exceptions_demo.py
脚本:
python exceptions_demo.py
你应该会看到以下输出:
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...
这个输出表明 ValueError
被捕获,并且程序继续执行。
现在,让我们修改脚本以抛出不同的异常,例如 TypeError
,并看看它是如何被处理的:
- 使用 VS Code 打开
~/project
目录下的 exceptions_demo.py
文件。
- 修改脚本以抛出
TypeError
:
try:
result = 1 + "a"
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
现在,再次运行脚本:
python exceptions_demo.py
你应该会看到以下输出:
Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...
这个输出表明 TypeError
被 except Exception as e:
块捕获,因为没有专门的 except TypeError
块。
捕获特定的异常能让你以不同的方式处理不同的错误,使你的代码更健壮,更易于调试。在下一步中,你将学习如何验证异常实例。