异常处理

Posted song-liang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。

常见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;">

以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

片段中的Android致命异常