异常处理
常见python 异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
异常处理
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理
try: name = ['a','b','c'] name[5] ##定义错误的索引,IndexError info_dic = {} info_dic['a'] ##定义错误的键值,KeyError except IndexError: print 'Your list is out of range...' except KeyError: print 'Your dic is out of key... ' ##except (IndexError,KeyError): 等同上面,同时抓取两个错误
抓取错误时从上往下,以第一个错误后,退出,不在向下继续运行
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") finally: print "Error: 没有找到文件或读取文件失败"
如果打开的文件没有可写权限,输出如下所示:
$ python test.py
Error: 没有找到文件或读取文件失败
raise用来触发异常
语法如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
try: 10/0 except Exception as e: print 'aaaaaaa', e raise e else: print('ok') finally: print('finally') print('hello world')
结果:
aaaaaaa integer division or modulo by zero Traceback (most recent call last): finally File "E:/test/test.py", line 11, in <module> raise e ZeroDivisionError: integer division or modulo by zero
解释:
raise关键字就是捕获到异常,并抛出。程序运行终止。
但是finally还是会执行的。所以最后的hello world没有打印出来。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
posted on 2017-11-09 00:13 song-liang 阅读(136) 评论(0) 编辑 收藏 举报