一,异常处理:
Q1:什么是异常?
在编译阶段没问题,在执行阶段才报错
Q2:什么是错误?
实指语法错误:在程序之前就规避掉,不应该留到程序中来进行异常处理
特点
异常出现之后,程序就不继续执行了,即便是放在try语句中的内容,在遇到报错之后也会中断这段语句的执行
二,异常处理语法结构
# try/except# try/except/else# try/finally# try/ except / finally# try/ except / else / finally
#单分支l = ['登录','注册']try: num = int(input('num:')) print(l[num-1])except IndexError: print('no')#多分支l = ['登录','注册']try: num = int(input('num:')) print(l[num-1])except (IndexError,ValueError): print('no')l = ['登录','注册']try: num = int(input('num:')) print(l[num-1])except ValueError: print('no')except IndexError: print('no')#万能异常处理:exceptionl = ['登录','注册']try: num = int(input('num:')) print(l[num-1])except Exception: print('no')
as语法:获取报错信息
#as语法l = ['登录','注册']try: num = int(input('num:')) print(l[num-1])except (ValueError): print('No')except Exception as e: #list index out of range 获取报错信息 print(e)
三,异常处理中的其他机制
#elsetry: name = '122'except NameError:#ValueError: print('触发了一个value error')else: print('执行啦') #主要目的:汇报这段try内的代码顺利的执行了
#finally 无论如何都要执行#用于收尾工作,打开了一个文件,占用了一个网络资源,打开了一个和数据库的链接,最后执行finally内的语句,进行关闭,即便是程序崩溃的情况下def func2(): try: f = open('content') name #语法错误 finally: #报错,程序退出都会执行 f.close() print('cloed')
#raise NameError:主动触发异常raise NameError("name'name'is not defined")
#自定义异常#一般不用于报错给用户,一般用于报错给开发者class EvaException(BaseException): #默认继承BaseException def __init__(self,msg): super().__init__() self.msg = msg def __str__(self): return self.msgraise EvaException('eva的异常')
#断言 :类似于if语句assert 1==1 #满足条件继续执行下面的代码assert 1==2 #不满足条件,报错