什么是异常?
在编程中,异常是指程序运行时出现的错误或意外情况。这些问题可能会导致程序无法正常执行。如果不妥善处理,程序可能会崩溃或停止运行。
Python 提供了一套完善的异常处理机制,允许我们捕获和处理这些错误,使程序更加健壮和友好。
1. 异常的定义
异常是在程序运行时发生的错误。例如:
- 用户输入了无效的数据。
- 试图打开一个不存在的文件。
- 计算过程中出现除以零的错误。
- 使用了未定义的变量。
这些错误会触发异常对象,并中断程序的正常流程。
2. 异常的示例
常见异常
以下是一些常见的 Python 异常:
ZeroDivisionError
: 除以零时引发。FileNotFoundError
: 文件未找到时引发。ValueError
: 函数接收到无效参数时引发。IndexError
: 列表索引超出范围时引发。
代码示例
# 除以零错误
print(10 / 0) # ZeroDivisionError: division by zero
# 文件未找到错误
with open("nonexistent_file.txt", "r") as file:
content = file.read() # FileNotFoundError
# 无效的值
num = int("abc") # ValueError: invalid literal for int()
3. 异常处理
为了避免程序崩溃,我们可以使用 Python 的 异常处理机制。它的核心是 try-except
块:
语法
try:
# 可能发生异常的代码
except 异常类型:
# 处理异常的代码
示例
try:
result = 10 / 0
except ZeroDivisionError:
print("错误:不能除以零!")
# 输出:
# 错误:不能除以零!
4. 捕获多种异常
可以在一个 try
块中处理多种异常,分别使用不同的 except
块。
示例
try:
num = int(input("请输入一个数字:"))
result = 10 / num
except ValueError:
print("输入无效,请输入一个数字!")
except ZeroDivisionError:
print("错误:不能除以零!")
# 测试用例:
# 输入 "abc" 输出:输入无效,请输入一个数字!
# 输入 0 输出:错误:不能除以零!
5. 使用 else
和 finally
else
块:在try
块没有引发异常时执行。finally
块:无论是否引发异常,都会执行。
示例
try:
num = int(input("请输入一个数字:"))
result = 10 / num
except ValueError:
print("输入无效,请输入一个数字!")
except ZeroDivisionError:
print("错误:不能除以零!")
else:
print(f"结果是:{result}")
finally:
print("程序执行结束。")
# 测试:
# 输入 2 输出:
# 结果是:5.0
# 程序执行结束。
6. 自定义异常
Python 允许我们定义自己的异常,用于处理特定的错误场景。
定义自定义异常
自定义异常需要继承自 Exception
类。
class CustomError(Exception):
pass
示例
class NegativeNumberError(Exception):
def __init__(self, value):
self.value = value
try:
num = int(input("请输入一个正数:"))
if num < 0:
raise NegativeNumberError(num) # 手动触发异常
except NegativeNumberError as e:
print(f"错误:输入了负数 {e.value}!")
7. 异常处理的意义
- 避免程序崩溃:即使遇到错误,也能让程序继续执行。
- 增强用户体验:用友好的提示代替难以理解的报错信息。
- 方便调试:定位问题并记录日志。
8. 小结
- 异常是在运行时可能出现的错误。
- 使用
try-except
捕获并处理异常,避免程序崩溃。 else
和finally
提供更灵活的流程控制。- 自定义异常适用于特定业务需求。
妥善处理异常,不仅是写好代码的基本要求,也是提高软件稳定性的重要手段。