1.异常
常见异常
未定义变量异常
格式异常
类型错误
异常本身是类的实例
Python的异常结构(基于继承)
在Python中所有的异常都是继承自BaseException,分为四大类:
1)SystemExit:Python退出异常
2)KeyboardInterrupt: 键盘打断(Ctrl+C)
3)GeneratorExit: 生成器退出(以后会说明)
4)Exception: 普通异常(只会使用这部分的异常)
错误回溯
2.处理异常
当出现异常时,首先编译器会报错,再者报错行之后的代码全部无法执行,为解决异常,执行如下:
基本的try...except...
try: print('-----1-----') #第1句正确 print(a) #第2句错误 print('-----3-----') #第3句正确 except: print('出现错误')
-----1-----
出现错误
try中放可能出现错误的代码段,except中写出现异常后的操作,但此时并没有提示为何出错
捕获具体异常
except后可写上捕获的具体异常类型,还可以通过as把捕获的异常信息储存到后边的变量中
try: print('-----1-----') #第1句正确 print(a) #第2句错误 print('-----3-----') #第3句正确 except NameError as info: print('捕获到异常代码,下面为异常信息') print(info)
-----1-----
捕获到异常代码,下面为异常信息
name 'a' is not defined
捕获多种异常
#写法一 写多个except try: pass except NameError: pass except TabError: pass #写法二 在except后用括号把异常括起来 try: pass except(NameError,TabError) as info: pass
关于 Exception 及其 子类 的解释
代码中会出现的异常都是 Exception 的子类, 一般都会在except最后加上 Exception以免错误遗漏
在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找
更加丰富的结构
try: print('-----1-----') #第1句正确 print(a) #第2句错误 print('-----3-----') #第3句正确 except NameError as info: print('捕获到异常代码,下面为异常信息') print(info) else: print('没有错误,执行我') finally: print('不管是否出错,都会执行我')
注意事项:
1. try 下面放可能出错的代码
2. except try下面的代码出错后,会执行except下面的代码
3. else try下面代码没有错误,执行else下面的代码
4. finally 不管try下面的代码有没有出错,始终都会执行
自定义异常
class Myerror(Exception): #自定义一场必须继承Exception类
pass
raise 主动抛出异常
格式:riase 异常类型
注意:raise是主动抛出后面写的异常类型,后面的代码全部终止运行(except仍会执行)
class Myerror(Exception): pass try: print('-----1-----') #第1句正确 print(a) #第2句错误 print('-----3-----') #第3句正确 raise NameError print('-----4-----') except NameError as info: print('捕获到异常代码,下面为异常信息') print(info) else: print('没有错误,执行我') finally: print('不管是否出错,都会执行我')
捕获到异常代码,下面为异常信息
name 'a' is not defined
不管是否出错,都会执行我
3.断言 assert
语法:
assert 表达式
表达式返回True 不把错
表达式返回False 报 AssertionError
assert 1==1 assert 1==2,'报错了'
Traceback (most recent call last):
File "/home/pyvip/py_case/venv/newfile.py", line 2, in <module>
assert 1==2,'报错了'
AssertionError: 报错了