第5课_异常处理
热度🔥:99 免费课程
授课语音
Python 中的异常处理机制
异常处理是 Python 中的重要特性,它帮助程序在运行时处理不可预见的错误,确保程序的正常运行。通过异常处理,可以捕获错误并采取相应的措施,而不是让程序直接崩溃。Python 提供了 try
、except
、else
和 finally
等关键字来管理异常。
1. 异常处理概述
异常是指程序执行过程中发生的错误或意外情况。在 Python 中,当代码运行时出现异常,解释器会停止当前代码的执行,并查找合适的异常处理代码。如果找到了合适的 except
块,程序会执行该块代码,继续运行。如果没有合适的处理方式,程序会终止并显示错误信息。
1.1 异常的基本概念
- 异常类型:每种异常都有一个对应的类型,如
ZeroDivisionError
、FileNotFoundError
、ValueError
等。 - 异常的传播:异常会从发生的地方开始向外传播,直到找到相应的处理器。如果没有找到处理器,程序将终止。
2. 异常处理语法
Python 的异常处理机制主要通过 try
、except
、else
和 finally
来实现。
2.1 try
和 except
try
块用于捕获可能发生异常的代码,except
块用于处理异常。最基本的语法格式如下:
try:
# 可能引发异常的代码
x = 1 / 0 # 除零错误
except ZeroDivisionError:
# 捕获到除零异常,执行的代码
print("不能除以零!")
中文注释
try
块中包含可能引发异常的代码。except
块用于捕获特定类型的异常,这里我们捕获的是ZeroDivisionError
异常,并在出现异常时打印提示信息。
2.2 多个 except
块
可以针对不同类型的异常,设置多个 except
块来处理不同的错误。
try:
num = int(input("请输入一个数字: "))
result = 10 / num
except ZeroDivisionError:
print("错误:不能除以零!")
except ValueError:
print("错误:输入无效,必须是数字!")
except Exception as e:
print(f"发生了未知错误: {e}")
中文注释
except ZeroDivisionError
用来处理除零错误。except ValueError
用来处理输入的值无法转换为整数的错误。except Exception as e
用来捕获所有其他异常,并打印出错误信息。
2.3 else
块
else
块在没有发生异常时执行。如果 try
块中的代码没有抛出异常,则会执行 else
块中的代码。
try:
num = int(input("请输入一个数字: "))
result = 10 / num
except ZeroDivisionError:
print("错误:不能除以零!")
except ValueError:
print("错误:输入无效,必须是数字!")
else:
print(f"计算结果是: {result}")
中文注释
else
块只有在try
块没有引发异常时才会执行。此处我们计算result
并打印结果。
2.4 finally
块
finally
块中的代码无论是否发生异常都会执行,通常用于清理资源,比如关闭文件、释放网络连接等。
try:
file = open("test.txt", "r")
content = file.read()
except FileNotFoundError:
print("错误:文件未找到!")
finally:
file.close() # 无论是否发生异常,都会执行文件关闭操作
print("文件已关闭。")
中文注释
finally
块中的代码不受异常是否发生的影响。在此示例中,文件始终会被关闭。
3. 自定义异常
除了使用 Python 内置的异常类型,还可以自定义异常类型来处理特定的错误。自定义异常类需要继承 Exception
类。
3.1 定义自定义异常
class MyCustomError(Exception):
"""自定义异常类"""
pass
def test_function():
raise MyCustomError("这是一个自定义异常")
try:
test_function()
except MyCustomError as e:
print(f"捕获到自定义异常: {e}")
中文注释
class MyCustomError(Exception)
定义了一个继承自Exception
的自定义异常类。- 在
test_function
中,我们手动抛出MyCustomError
异常并捕获它。
4. 异常链
Python 支持在捕获异常时重新抛出新的异常,或者将当前异常传递到另一个地方处理,这就是异常链。
4.1 异常链的示例
try:
x = 1 / 0
except ZeroDivisionError as e:
raise ValueError("发生了除零错误") from e
中文注释
raise ValueError("发生了除零错误") from e
用来抛出一个新的异常,并将原始的异常作为链的部分,帮助调试时追踪异常的根源。
5. 总结
try
和except
:捕获并处理异常,防止程序崩溃。else
:在没有异常时执行,通常用于正常处理结果。finally
:无论是否发生异常,都会执行,用于资源的清理。- 自定义异常:可以根据需求创建自定义异常类型。
- 异常链:可以在捕获异常时抛出新的异常,方便错误追踪和处理。
通过使用 Python 的异常处理机制,程序能够在发生错误时更优雅地进行处理,提升了代码的健壮性和可维护性。