一.异常
1.概念与引入
在 Python 中,“异常”是一种在程序运行过程中出现错误的机制,用于处理中断程序正常执行的错误情况。异常可以在程序运行过程中自动触发(比如除以零、访问不存在的文件等),也可以由程序员手动引发。
那为什么需要异常呢????????
当然是因为
异常的作用是优雅地处理错误,而不是让程序直接崩溃。
2.异常的捕获方式
1.基本语法
try:
# 可能会引发异常的代码
result = 10 / 0
except ZeroDivisionError:
# 异常发生后的处理逻辑
print("不能除以0")
2.捕获多个异常
try:
value = int("abc")
except (ValueError, TypeError):
print("发生了 ValueError 或 TypeError")
3 .获取异常对象
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"捕获到异常:{e}")
4. 使用else块(没有异常时执行)
try:
result = 10 / 2
except ZeroDivisionError:
print("除以零错误")
else:
print(f"结果是:{result}")
5.使用finally块(总会执行)
try:
result = 10 / 2
except ZeroDivisionError:
print("除以零错误")
finally:
print("无论是否有异常,这里都会执行")
6.捕获所有异常
try:
some_code()
except Exception as e:
print(f"发生异常:{e}")
# 这是所有异常的简写
try:
a = 10 / 0
except:
print(f"发生异常:{e}")
3.异常的传递性
在 Python 中,异常具有传递性,意思是如果在一个函数中没有处理异常,该异常会被向上传递到调用该函数的地方,直到遇到能够处理它的 try...except
语句为止。如果在整个调用链上都没有被处理,最终会导致程序中断,并输出异常信息(Traceback)
举个例子:
def func1():
func2()
def func2():
func3()
def func3():
raise ValueError("发生了一个错误!")
try:
func1()
except ValueError as e:
print(f"捕获到异常: {e}")
输出:
捕获到异常: 发生了一个错误!
在这个例子中,func3中抛出了ValueError。func2没有处理异常,异常向上传递。 func1也没有处理异常,继续向上传递。最终在try...except中被捕获并处理