3. 手动抛出异常

当程序遇到不符合预期情况时,可以使用raise语句手动触发(抛出)异常。

print('欢迎使用年龄判断系统')
try:
    age = int(input('请输入你的年龄:'))
    if 18 <= age <= 120:
        print('成年')
    elif 0 <= age < 18:
        print('未成年')
    else:
        # print('输入的年龄有误!(年龄应该为0~120的整数)')
        raise ValueError('年龄应该为0~120的整数')
except Exception as e:
    print(f'程序异常:{e}')

4. 异常的传递机制

  1. 如果异常没有被当前代码块所捕获处理,那该异常就会沿着调用链,逐层传递给其调用者。
  2. 如果所有调用者,都没有捕获该异常,那最终程序将因【未处理异常】而意外终止。
def test1():
    print('******test1开始******')
    result = '100' + 100
    print('******test1结束******')

def test2():
    print('******test2开始******')
    try:
        test1()
    except Exception as e:
        print(f'程序异常:{e}')
    print('******test2结束******')

def test3():
    print('******test3开始******')
    test2()
    print('******test3结束******')

test3()

执行以上代码,控制最终会输出

******test3开始******
******test2开始******
******test1开始******
程序异常:can only concatenate str (not "int") to str
******test2结束******
******test3结束******

5. 自定义异常类

  1. 由开发人员自己定义一个异常类,用来表示代码中“更具体、更有业务含义”的异常。
  2. 具体规则:定义一个类(类名通常以Error结尾),继承Exception类或它的子类。
class SchoolNameError(Exception):
    def __init__(self, msg):
        super().__init__('【校名异常】' + msg)

def check_school_name(name):
    if len(name) > 10:
        raise SchoolNameError('学校名过长')
    else:
        print('学校名是合法的')

try:
    check_school_name('atguiguuuuuuuuuuuuuuu')
except SchoolNameError as e:
    print(f'程序异常:{e}')

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容