异常处理
异常处理:
Trackback:异常的追踪信息
NameError:异常类
name ‘a’ is not defined:异常值
python中一个异常标识一种错误
异常类:
AttributeError:访问一个对象没有的属性
NameError:未声明,未初始化对象
IOError:输入输出异常,基本上是文件的打开出现错误
ImportError:无法导入模块或者包,(可能由于路径或者名称问题)
IndentationError:缩进错误
IndexError:超出边界,l[1000]
KeyError:访问字典中不存在的键
KeyboardInterr:CTRL+C被按
SyntaxError:非法的python代码
TypeError:传入对象类型与要求不符合
UnboundLocalError:访问一个未被设置的局部变量,基本上是因为存在一个同名的局部变量ValueError:传入一个调用者不期望的值,无效的参数
OSError:操作系统错误
ZeroDIvisionError:除零
WindowsError:系统调用失败
UnicodeError Unicode:相关的错误
UnicodeDecodeError Unicode:解码错误
UnicodeEncodeError Unicode:编码错误
UnicodeTranslateError Unicode:转换时错误
SystemError:一般的解释器系统错误
异常处理:(提供异常处理机制来增强代码的健壮性与容错性)
python解释器检测到错误,触发异常,也允许程序员自己触发异常,程序员自己编写代码,捕获异常,如果捕获异常,则跳转执行相应的处理异常代码的程序,使程序不会崩掉,这是异常处理。
异常是由程序的错误引起的,语法上的错误和异常处理无关,需要在程序运行前处理好。
异常处理:程序出错前的异常处理 程序出错后的处理异常
if判断异常处理:
只能针对一段代码,对于不同代码相同的异常类型需要写大量重复的if判断来处理,
而这些代码都与程序本身无关,使人感觉可读性差
try...except异常处理:
*****************万能异常类*******
except Excetion as e:
print(e)
******************多分支*************
s1='hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except ValueError as e:
print(e)
except KeyError as e:
print(e)
************多分支后加Exception*************
s1='hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except ValueError as e:
print(e)
except Exception as e:
print(e)
try...except + else:
如果代码块无异常,则执行else代码块
如果代码块有异常,则else代码块不执行
try...except + finally:
不管代码块有没有异常,finally代码块都会被执行
finally代码块通常是做清理工作的
*************主动触发的异常******
try:
raise TypeError('类型错误')
except Exception as e:
print(e)
************自己定义的异常*******
class AnnException(BaseException):#自己定义的异常通常都要继承BaseException
def __init__(self,.mes):
self.mes=mes
def __str__(self):
return self.mes
try:
raise AnnException('类型错误')
except AnnException as e:
print(e)
**************断言***********
def test():
res=1
return 1
r=test()
assert r=1#根据r的值对下面代码进行处理
try...except的好处:
1:把错误代码和工作代码分开
2:代码易组织,更清晰,复杂工作易实现
3:相对安全,程序不容易崩溃