Skip to content

python Error Exception

KerwinKoo edited this page Dec 26, 2015 · 1 revision

python 异常处理

执行try -- except -- else -- finally 中的各种情况(包含与不包含return)

    1. 如果没有异常发生, try中有return 语句, 这个时候else块中的代码是没有办法执行到的, 但是finally语句中如果有return 语句会修改最终的返回值, 我个人理解的是try中return 语句先将要返回的值放在某个 CPU寄存器,然后运行finally语句的时候修改了这个寄存器的值,最后在返回到try中的return语句返回修改后的值。
    1. 如果没有异常发生, try中没有return语句,那么else块的代码是执行的,但是如果else中有return, 那么也要先执行finally的代码, 返回值的修改与上面一条一致。
    1. 如果有异常发生,try中的return语句肯定是执行不到, 在捕获异常的 except语句中,如果存在return语句,那么也要先执行finally的代码,finally里面的代码会修改最终的返回值,然后在从except 块的retrun 语句返回最终修改的返回值, 和第一条一致。
    1. try 中有return, else也有return,finally也有return: 这里因为没有发生异常, 所以会执行到try块中的return 语句,但是finally又必须执行,所以执行try中return 之前去执行了finally语句,并且可以认为,finally语句修改了最后返回的值,将try中的返回值修改为5并最终返回,所以else语句并没有得到执行。

注意:

python open file:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。

正确方法:

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

[[TOC]]

Clone this wiki locally