语法错误:应该在写代码的时候就规避掉
SyntaxError
NameError name
……
程序执行时的错误
IndexError [][1]
KeyError {}["key]
EOFError pickle.load()
FileNotFoundError open('aa")
ModuleNotFoundError import aaaaaaaaa
ValueError int("sdjkhf")
当有多行报错的时候是为什么?
在嵌套调用的过程中,内部的代码出了问题,外部所有的调用的地方都成为报错追溯信息的一部分。
解决方法:从下往上找,首先找到你写的代码出错的那一行(是在不行找百度)
try: except:具体用法
单分支:只有一个except 错误类型: except处理的异常必须和实际报错的异常是相同的。
多分支:有两个或以上的except 错误类型: 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支。如果找不到能处理和报错类型相同的分支,会一直往下走,最后还没有找到就会报错。
多分支合并:except (错误类型1,错误类型2):
万能异常:except Excepeion :或者 except :
as语法:except Excepetion as e: e就是错误信息
多分支+万能异常:万能异常永远凡在异常处理的最下面。
else分支:当try中的代码不发生异常的时候,走else分支,如果发送成功 进行一些处理。
finally分支:无论如何都会被执行 **即使return也会先执行fianlly中的代码,即使报错了也会先执行finally中的代码,然后再结束程序
finally用来回收一些操作系统的资源:数据库连接 打开的文件句柄 网路连接
主动抛出异常:是给其他开发者用的
raise valueError("错误信息")
断言(一种语法)
assert 1==2 #只能接受一个布尔值