Python异常处理笔记

异常处理是编程语言的一种机制,用于处理软件或系统中出现的异常状况(超出程序正常执行流程的某些特殊条件)。在当前主流编程语言的错误处理机制中,异常处理已经逐步代替了error code错误的处理方式,异常处理分离了接受和处理错误代码。这个功能理清了编程者的思绪,也使代码增强了可读性,方便维护者阅读和理解。

 

Python异常处理使用try,catch,else和finally关键字来尝试可能未成功的操作,处理失败及正常情况,以及在事后清理资源。

 1 #可能会发生异常的程序块
 2 try:
 3     block_try
 4 
 5 #第一种except形式
 6 except Exception1:
 7     block_when_exception1_happen
 8 
 9 #第2种Except形式
10 except (Exception2,Exception3,Exception4):
11     block_when_exception1_or_2_or_3_happen
12 
13 #第3种except形式
14 except Exception5, variance:
15     block_when_exception5_happen
16 
17 #第4种except形式
18 except (Exception6,Exception7), variance:
19     block_when_exception6_or_7_happen
20 #第5种except形式
21 except :
22     block_for_all_other_exceptions
23 
24 #当没有出现异常时的处理
25 else:
26     block_for_no_exceptions
27 #无论是否出现异常,最后要做的处理
28 finally:
29     block_anyway

1,可能产生异常的代码需要写在try块中。try块在执行过程中,一旦发生异常,则try块剩余的代码被终止执行。

2,except块用于定义当某种异常发生时所需要执行的代码;

except具体有5种形式:

第一种形式是except指定当某种异常发生时,执行块内的代码;

第2种形式是一条except语句可以捕捉多种异常;

第3种形式是捕捉的异常可以被转换为一个变量、variance;

第4种形式是可以捕获多种异常并转换为变量;

第5种形式是捕获任何异常。

 

3,每种except形式都可以被定义多次,当try块中发生异常时,系统从上到下逐个检查、except块。当发生满足发生异常定义的except块时,进入该except块进行异常处理,并且其他except块被忽略。

4,else是可选块,用于定义当try块中的代码没有发生异常时所需做的处理。

5,finally时可选块,无论try块中是否有异常发生,其中的代码都会执行。

 

以下是示例代码:

 1 #! /usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 try:
 5     myList = [4,6]
 6     print myList[10]
 7     print "This is never been called"
 8 except ZeroDivisionError as e:
 9     print e
10 except (IndexError,EOFError),e:
11     print "Exception happened"
12     print e
13 except :
14     print "Unknown exception happened"
15 else:
16     print "No exception happened!"
17 finally:
18     print "Process finished!"

try块中定义了一个列表myList,然后尝试打印myList的index为10的元素,但是因为myList中只有两个元素(4,5,6),所以会引发索引异常(IndexError)。该异常被第2个except块多捕获,代码执行结果如下:

 

自定义异常

这里除了有系统定义的异常外,比如(IndexError,ZeroDivisionError外)

我们还可以定义自己的异常。自定义异常的编程方法是建立一个继承自系统的异常子类,并且在需要引发该异常时使用rise语句抛出异常。

 1 #! /usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import sys
 5 class MyError(Exception):
 6     def __str__(self):
 7         return "I'm a self-defined Error!"
 8 
 9 def main():
10     try:
11         print "************* Start of main() *********************"
12         if len(sys.argv)==1:
13             raise MyError()
14         print "************* End of main() ***********************"
15     except MyError as e:
16         print e
17 
18 if __name__=='__main__':
19     main()

例子中定义了一个异常类MyError,异常类的__str__()函数可以用于设置本异常字符串表达方式。主函数main()判断是否在启动程序时输入了命令行参数,如果没有输入参数则用raise关键字引发MyError异常。将该代码保存到文件except.py中。效果如下。

 

 

posted on 2017-06-25 20:48  h3iß3n  阅读(90)  评论(0)    收藏  举报

导航