Maison > Questions et réponses > le corps du texte
try:
1/0
except:
print 'something wrong happened..'
finally:
print 'it seems i cannot be with except'
除非是我对《python基础教程》上面这句话理解有问题,这段代码运行完全没有问题,求解惑。
阿神2017-04-17 11:37:14
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 语 法而终止,原来的异常将丢失而且无法重新引发.
参考:python 核心编程
阿神2017-04-17 11:37:14
这本书对应的python版本太老了。py2.4以前是不能一起用的,2.5+就可以了。
这种老的不更新的书跟《pE INTO PYTHON》一样,能不看就别看了,入门推荐《a byte of python》。