python 各个击破之 异常第一部分

异常处理是编程语言的一种机制,用于处理软件或信息系统中的一场异常情况,即超出程序执行结果预期的问题。

异常

异常处理是编程语言的一种机制,用于处理软件或信息系统中的一场异常情况,即超出程序执行结果预期的问题。
在目前大部分的编程语言中,异常处理已经非常通用,异常处理分离了接受和处理错误的代码。这个功能清理了编程者的思绪,也使代码增强了可读性,方便了维护者阅读和理解。

异常处理又称错误处理,它提供了处理程序运行时出现的任意意外或者异常情况的方法。在Python中使用try catch else finally 关键词来尝试可能未成功的操作、处理失败及正常的情况,以及在事后的清理操作。
举例看如何定义:

try:
    f=open('test.txt','r')
except IOError as e:
    print e

如果出现IOError异常,引发的错误将存储在对象e中,然后控制权被传递给except代码块中的代码。这里只捕捉到一个异常,当然对于打开这个文件来说,异常可能就是一个,这个在日常编程中需要认真对待每一种情况。
那有些错误不在一般的异常之列咋办呢?当然可以自己诱发一个异常。
用raise 来诱发,这里暂时不展开讲这个问题,因为我在开发时遇到过这个问题,需要用整篇文章来阐述它,这里忽略。
通常来说,一但发生异常,就意味这不可挽回的错误,并且中断程序的正常运行。那么可以使用多个子语句来处理多个异常代码块,如下演示:

try:
    # do something
except IOError as e:
    #处理出现的I/O错误
except TypeError as e:
    # 处理类型错误
except NameError as e:
    # 处理名称错误

当然这不是最好的办法,我们在编程的过程中也会用到这种推敲的方法,层层推出最好的编码方式,我以前也喜欢直接给方案,后来发现大家写文档都是这么写,所以我也跟着学。
所有的异常可以合在一起捕捉:

try:
    # do something
except (IOError,TypeError,NameError) as e:
    # 处理上述的异常

我们在编程中,如果遇到我们显而易见的异常,我们需要手动忽略异常,咋整呢?看代码便知:

try:
    # do something
except IOError:
    pass

使用Exception可以捕捉到与程序退出相关异常之外的所有异常,如下代码:

try:
    #do something
except Exception as e:
    # 爆出异常

使用这种方式捕捉异常,会惹出很多麻烦,例如,这段代码还将会捕捉到键盘中断和程序推出的请求,而这些请求并不是你需要捕捉的对象。那到底怎样用呢?
try 也支持else 分支语句,它必须更在最后一个except子句的后面,如果try代码块中的代码没有发生异常,就会执行else字句中的代码。
如:

try:
    f= open('foo.txt','r')
except IOError as e:
    error_log.write('Unable to open foo.txt :%s\n' % e)
else:
    data= f.read()
    f.close()

参考文献

相关文章