try: 1/0 except: print 'something wrong happened..' finally: print 'it seems i cannot be with except'
除非是我对《python基础教程》上面这句话理解有问题,这段代码运行完全没有问题,求解惑。
认证0级讲师
try: ... exception: ... else: ...
只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else
finally是无论是否捕捉到异常都会执行的一句,finally 可以单独和try搭配,也可以和except,包括else一起配合使用
try: A except MyException: B else: C finally: D
执行顺序可能为A-B-D或A-C-D finally 单独和try连用时,不是用来捕捉异常,常常是用来维持一致的行为。
不是用来捕捉异常,常常是用来维持一致的行为。
当try范围中产生一个异常时,会立即跳转到finally,finally执行完毕后,会继续向上一层引发异常
会继续向上一层引发异常
一个这样写的理由是如果在 finally 的语句块内发生了一个异常,你可以创建一个同现有的异常 处理器在同一个(外)层次的异常处理器来处理它.这样,从本质上来说,就可以同时处理在原始的 try 语句块和 finally 语句块中发生的错误.这种方法唯一的问题是,当 finally 语句块中的确发生异常 时,你会丢失原来异常的上下文信息,除非你在某个地方保存了它. 反对这种写法的一个理由是:在很多情况下,异常处理器需要做一些扫尾工作,而如果你在异常 处理之前,用 finally 语句块中释放了某些资源,你就不能再去做这项工作了.简单的说,finally 语句 块并不是如你所想的是"最终的(final)"了. 一个最终的注意点:如果 finally 中的代码引发了另一个异常或由于 return,break,continue 语 法而终止,原来的异常将丢失而且无法重新引发.
反对这种写法的一个理由是:在很多情况下,异常处理器需要做一些扫尾工作,而如果你在异常 处理之前,用 finally 语句块中释放了某些资源,你就不能再去做这项工作了.简单的说,finally 语句 块并不是如你所想的是"最终的(final)"了.
一个最终的注意点:如果 finally 中的代码引发了另一个异常或由于 return,break,continue 语 法而终止,原来的异常将丢失而且无法重新引发.
参考:python 核心编程
这本书对应的python版本太老了。py2.4以前是不能一起用的,2.5+就可以了。
这种老的不更新的书跟《pE INTO PYTHON》一样,能不看就别看了,入门推荐《a byte of python》。
简单理解就是无论try里的语句是否发生异常,最后都会去执行一遍finaly里面的内容。
可以肯定的回答能一起使用
先看下else的使用:
只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else
再看下finally:
finally是无论是否捕捉到异常都会执行的一句,finally 可以单独和try搭配,也可以和except,包括else一起配合使用
执行顺序可能为A-B-D或A-C-D finally 单独和try连用时,
不是用来捕捉异常,常常是用来维持一致的行为。
当try范围中产生一个异常时,会立即跳转到finally,finally执行完毕后,
会继续向上一层引发异常
参考:python 核心编程
这本书对应的python版本太老了。py2.4以前是不能一起用的,2.5+就可以了。
这种老的不更新的书跟《pE INTO PYTHON》一样,能不看就别看了,入门推荐《a byte of python》。
简单理解就是无论try里的语句是否发生异常,最后都会去执行一遍finaly里面的内容。