84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
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里面的内容。