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

文章目录

    • 1、基础异常类(所有异常的父类)
    • 2、异常类型总结
    • 3、异常处理
    • (1)try......except语句:捕获和处理异常
    • (2)try......except......else语句
    • (3)try......except......finally语句
    • (4)raise语句
    • (5)assert语句:调试断言

1、基础异常类(所有异常的父类)

BaseException:所有内置异常的基类(不建议直接捕获)。
Exception:所有非系统退出类异常的基类,通常用于捕获通用异常。

2、异常类型总结

【Python进阶篇 面向对象程序设计(5) 异常处理】_第1张图片

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个小朋友")

【Python进阶篇 面向对象程序设计(5) 异常处理】_第2张图片
接着如果将苹果和小朋友输入成小数或者不是数字,会抛出ValueError,那么需要再添加个异常处理,再加个except语句。
【Python进阶篇 面向对象程序设计(5) 异常处理】_第3张图片
代码如下:

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("输入错误,请输入整数")

【Python进阶篇 面向对象程序设计(5) 异常处理】_第4张图片
在需要同时处理多个异常时,亦可以采用如下代码:

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 必须为正数")

你可能感兴趣的:(python,pycharm,开发语言)