什么是异常?
异常(Exception)是指在程序执行过程中发生的错误事件,它会中断程序的正常执行流程。异常可以由程序中的错误引发,也可以通过主动抛出异常来处理特殊情况。Python 使用异常处理机制来捕获和处理这些错误,以避免程序崩溃,并允许程序有机会做出适当的响应。
语法:
使用 try-except
块来捕获和处理异常。
try:
# 可能引发异常的代码
# raise 用于主动抛出异常
except Exception as e: # 捕获指定异常类型
# 处理异常的代码
else:
# 如果没有发生异常,执行这部分代码
finally:
# 无论是否发生异常,都会执行这部分代码
示例:
try:1 / 0 # 除零异常
except Exception as e:print(f"发生异常了,except处理异常,异常信息:{e}")
else:print("没有异常,else执行")
finally:print("无论是否发生异常,finally都执行")
捕获指定异常类型
捕获指定异常,有多个except 时,except依次进行捕获,如果捕获到指定异常,后面的except不再进行捕获。except也可以传元组类型,例如 except(异常类型1, 异常类型N)
try:# result = 10 / 0 # 除零异常open("aaaaaa.sqsfa", "r") # 文件不存在异常
except (ZeroDivisionError, IndexError) as e: # 捕获指定异常,指定异常不存在,继续向下执行下一个except捕获print("捕获指定异常")
except Exception as e:print("捕获所有异常")
else:print("没有异常")
finally:print("无论是否发生异常,这部分代码都会执行")
主动抛出异常 raise
try:raise ZeroDivisionError
except ZeroDivisionError as e:print("发生异常")
finally:print("无论是否发生异常,这部分代码都会执行")
自定义异常
# 自定义异常
class MyCustomError(Exception):def __init__(self, message):self.message = messagesuper().__init__(self.message)# 使用异常
try:# raise 抛出异常raise MyCustomError("我是异常信息")
except MyCustomError as e:print(f"捕获到自定义异常: {e}") # 捕获到自定义异常: 我是异常信息
异常的传递
如果在
try
块中没有捕获到异常,异常会继续向外传播,直到被捕获或到达顶层,这时程序会终止并打印堆栈跟踪(traceback)。