异常处理
Python解释器检测到错误,触发异常(也允许程序员自己触发异常),编写特定代码来捕捉异常并进行另外一个分支的异常处理。异常处理代码不应与程序本身逻辑产生影响。
==增加异常处理机制是为了增强程序的健壮性与容错性==
常用异常表
异常标识 | 释义 |
---|---|
AttributeError | 试图访问一个对象没有的树形。如:执行foo.x,但foo没有属性x |
IOError | 输入/输出异常,基本上是无法打开文件 |
ImportError | 无法引入模块或包,基本上是路径问题或者名称错误 |
IndentationError | 语法错误(的子类),代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
KeyboardInterrrupt | Ctrl+C被按下强制结束 |
NameError | 使用一个还未被赋予对象的变量 |
SyntaxError Python | 代码非法,代码不能编译(一般是因为语法错误造成的) |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量 |
CalueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
异常处理方式
异常未处理示例
# -*- coding:utf8 -*-
a = 4
list = [1,2,3]
list[a]
Traceback (most recent call last):
File "F:/python/day29/异常处理.py", line 3, in <module>
list[4]
IndexError: list index out of range
if异常处理
本身可以解决异常,但需要处理逻辑教多,重复代码教多。可读性差
示例
# -*- coding:utf8 -*-
a = "4"
list = [1,2,3]
if a.isdecimal() == True and int(a) <= len(list) - 1:
print(list[int(a)])
else:
print("程序错误,请输入正确的数值!")
程序错误,请输入正确的数值!
Python异常处理模型
语句
try:
#被检测的代码块#
except 异常类型:
#检测到异常的通知逻辑
单分支示例
# -*- coding:utf8 -*-
try:
a = 4
list = [1,2,3]
list[a]
except IndexError as e: #异常信息赋值
print(e) #打印异常信息
list index out of range
多分支示例
try:
a = 4
list = [1,2,3]
list[a]
except IndexError as e:
print(e)
except ValueError as f:
print(f)
list index out of range
万能异常示例
# -*- coding:utf8 -*-
try:
a = 4
list = [1,2,3]
list[a]
except Exception as z:
print(z)
list index out of range.
其它异常机构
try:
[被检测的代码块]
except 异常类型:
[检测到异常的通知逻辑]
else:
[没有异常则执行的代码块]
finally:
[无论异常与否都会执行该代码块]