文章目录
1、基础异常类(所有异常的父类)
BaseException:所有内置异常的基类(不建议直接捕获)。
Exception:所有非系统退出类异常的基类,通常用于捕获通用异常。
2、异常类型总结
3、异常处理
(1)try…except语句:捕获和处理异常
格式如下:
try:
# 可能抛出异常的代码块
except 指定要捕获的异常
#进行异常处理的代码块
try:
# 可能抛出异常的代码块
result = 10 / 0 # 示例:除零错误
except ZeroDivisionError:
# 异常处理逻辑
print("除数不能为零!")
练习题:模拟幼儿园分苹果(除数不能为0)
def division():
print("\n======= 分苹果了 ======\n")
apple = int(input("请输入苹果的个数:"))
children = int(input("请输入来了几个小朋友:"))
result = apple // children # 地板除法//:向下取整商
remain = apple - result * children # 余数
if remain > 0:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,
"个,剩下", remain, "个苹果!")
else:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,
"个苹果!")
if __name__ == '__main__':
try:
division()
except ZeroDivisionError:
print("\n出错了@——@ 苹果不能分给0个小朋友")
接着如果将苹果和小朋友输入成小数或者不是数字,会抛出ValueError,那么需要再添加个异常处理,再加个except语句。
代码如下:
def division():
print("\n======= 分苹果了 ======\n")
apple = int(input("请输入苹果的个数:"))
children = int(input("请输入来了几个小朋友:"))
result = apple // children # 地板除法//:向下取整商
remain = apple - result * children # 余数
if remain > 0:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,
"个,剩下", remain, "个苹果!")
else:
print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,
"个苹果!")
if __name__ == '__main__':
try:
division()
except ZeroDivisionError:
print("\n出错了@——@ 苹果不能分给0个小朋友")
except ValueError:
print("输入错误,请输入整数")
在需要同时处理多个异常时,亦可以采用如下代码:
if __name__ == '__main__':
# try:
# division()
# except ZeroDivisionError:
# print("\n出错了@——@ 苹果不能分给0个小朋友")
# except ValueError:
# print("输入错误,请输入整数")
try:
division()
except (ZeroDivisionError, ValueError) as e:
print("出错了,原因是:", e)
(2)try…except…else语句
try:
result = 10 / 2 # 无异常
except ZeroDivisionError:
print("除零错误")
else:
print(f"计算结果:{result}") # 仅在无异常时执行
(3)try…except…finally语句
无论程序中有无异常,finally代码块中的代码都会被执行。
try:
file = open("data.txt", "r")
data = file.read()
except FileNotFoundError:
print("文件不存在")
finally:
print("清理资源...") # 无论是否有异常都执行
if 'file' in locals():
file.close() # 确保文件关闭
(4)raise语句
主动抛出异常:
def divide(a, b):
if b == 0:
raise ZeroDivisionError("除数不能为零") # 主动抛出异常
return a / b
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(f"错误:{e}")
使用raise抛出异常时,尽量选择合理的异常对象。
(5)assert语句:调试断言
一般用于对程序某个时刻必须满足的条件进行验证
x = -5
assert x >= 0, "x 必须为正数" # 如果条件不满足,抛出 AssertionError
# 等价于:
if not x >= 0:
raise AssertionError("x 必须为正数")