异常处理基本语法:spa
try: pass except Exception,ex: pass
经常使用异常种类:code
AttributeError 试图访问一个对象,没有的属性。好比foo.x,可是foo没有属性x IOError 输入/输出异常(基本上是没法打开文件) ImportError 没法引入模块或包(基本上是路径问题或名称错误) IndentationError 语法错误的一种,代码缩进不对 IndexError 下标索引超出序列边界,好比当一个列表x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还没有定义的变量 SyntaxError Python代码非法,代码不能编译 TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是因为另有一个同名的全局变量,致使你觉得正在访问它 ValueError 传入一个调用者不指望的值,即使值的类型是正确的。好比,你要将一个字符串转换成数字:n='abc' int(n)
单个异常抓取:对象
data = {'id':123} try: data['name'] except KeyError as e: print('没有这个key:',e)
多个异常抓取:blog
这种方法若是第一个错了,就不会执行后面的异常处理。
data = {'id':123} list = [1,2] # 只会处理 KeyError ,后面的IndexError不会处理。 try: data['name'] list[3] except KeyError as e : print('没有这个key:',e) except IndexError as e : print('列表操做错误:',e)
多个指定异常,返回同一个结果:索引
# 多个指定异常,返回同一个结果。 # 只要出现了其中任意一个就会返回。 data = {'id':123} list = [1,2] try: data['name'] list[3] except (IndexError,KeyError) as e: # 出现指定的错误时,执行。 print('出现了指定错误。')
万能异常:字符串
无论出现什么错误,都能获取。不建议一开始就是用。it
data = {'id':123} list = [1,2] try: data['name'] list[3] except Exception as e: # 抓取任意异常 print('出现了错误。')
其余异常结构:io
except Exception 出现非指定错误时,执行。编译
else 没有错误时,执行class
finally 无论有没有错,都执行。
data = {'id':123} list = [1,2] try: # data['name'] list['abc'] n = 1 except (IndexError,KeyError) as e: # 出现指定的错误时,执行。 print('出现了指定错误。') except Exception as e: # 出现非指定错误时,执行。 print('出现了非指定错误!未知错误',e) else: # 没有错误时,执行。 print('一切正常,没有错误。') finally: # 无论有没有错,都执行。 print('无论有没有错,都执行这个!')
主动触发异常:
try: raise Exception('主动触发了异常!') except Exception as e: print(e)
自定义异常:
class MyExceptin(Exception): def __init__(self, msg): self.msg = msg try: raise MyExceptin('自定义异常!') except MyExceptin as e: print(e)