【Python进阶篇 面向对象程序设计(5) 异常处理】

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 必须为正数")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值