手动抛出异常
当程序遇到不符合预期情况时,可以使用raise语句手动触发
python
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}')
# raise NameError('ertghfgfggvb')
# raise KeyboardInterrupt('ectehfefgexbl')
异常的传递机制
1.如果异常没有被当前代码块所捕获处理,那该异常就会沿着调用链,逐层传递给其调用者。
2.如果所有调用者,都没有捕获该异常,那最终程序将因【未处理异常】而意外终止。
python
def test1():
print('******test1开始******')
result = '100' + 180
print('******test1吉******')
def test2():
print('******test2开始******')
test1()
print('******test2结束******')
def test3():
print('******test3开始*******')
test2()
print('******test3结束*******')
test3()
自定义异常类
1.由开发人员自己定义一个异常类,用来表示代码中"更具体、更有业务含义"的异常。
2.具体规则;定义个类(类名通常以 Error 结尾),继承 Exception 类或它的子类。
python
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('atguiguuu')
except SchoolNameError as e:
print(f'程序异常:{e}')