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中。效果如下。

浙公网安备 33010602011771号