异常处理
异常是错误发生前的一种信号,如果没有人来处理这个信号,就会中断执行并且抛出错误信息。
异常分为语法检查异常和运行时异常:
语法检查异常是最低级的异常 在编译器里自动提示 在文本编辑器时当你运行代码解释器就会检查语法 绝对不能犯语法检查异常的错误
运行时异常是我们处理的重点,通常在代码运行时才会被发现,在运行时发生异常并且没有正确处理,就会抛出错误信息 并中断程序执行
我们学习异常处理是为了让我们的程序更加稳定,保证健壮性
常见的异常:
NameError 找不到这个名字 变量或者函数
ValueError 在调用一个函数时给的值不正确
TypeError 类型错误
ZeroDivisionError 除数不能为0
KeyError 没有这个key
IndexError 索引不存在
StopIteration 没有更多的值可以迭代
FileNotFoundError 文件不存在
io.UnsupportedOperation 文件的操作不支持
AttributeError 没有这个属性
KeyboardInterrupt 程序被强行终止
异常处理写法: 多异常类型处理 try: name [][1] 1/0 except NameError: print('name') except IndexError: print('list') except ZeroDivisionError: print('zero') ===> name 强调:一旦try 中有代码抛出了异常 后面的代码全都不执行 多异常类型处理2 try: name [][1] 1/0 except (NameError,IndexError,ZeroDivisionError): print('name,list,zero')
万能异常类型 Exception 或者 BaseException 基于面向对象的继承与多态
try: name [][1] 1/0 except Exception: print('name,list,zero')
不常用的语法
try: name except Exception: print('name') else: print('代码正确')#try中没有发生异常时运行 finally: print('===>')#不管有没有发生异常都会运行
在下面的代码必须依赖上面代码的正确数据时可以使用断言
name = 'xia' assert name == 'egon' #代码错误时可以抛出一个AssertionError 来表表示断言失败 print(name)
自定义异常类型
主动抛出异常: Class =input('请输入班级名') if Class == 'python': print('yes') else: raise ValueError('你输入的班级名不对') 自定义异常: class CusError(BaseException): def __init__(self,name): self.name =name def func(): ls = input('y/n:') if ls == 'y': print('正确') else: raise CusError('xia')# 主动抛出异常 try: func() except CusError as e:#使用e来获取异常对象 print(e.name)