recherche

Maison  >  Questions et réponses  >  le corps du texte

python - 在一个try语句中不能同时使用except和finally子句?

try:
    1/0
except:
    print 'something wrong happened..'
finally:
    print 'it seems i cannot be with except'

除非是我对《python基础教程》上面这句话理解有问题,这段代码运行完全没有问题,求解惑。

PHP中文网PHP中文网2805 Il y a quelques jours1999

répondre à tous(3)je répondrai

  • 阿神

    阿神2017-04-17 11:37:14

    可以肯定的回答能一起使用

    先看下else的使用:

    try:
        ...
    exception:
        ...
    else:
        ...
    
    

    只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else

    再看下finally:

    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 核心编程

    répondre
    0
  • 阿神

    阿神2017-04-17 11:37:14

    这本书对应的python版本太老了。py2.4以前是不能一起用的,2.5+就可以了。

    这种老的不更新的书跟《pE INTO PYTHON》一样,能不看就别看了,入门推荐《a byte of python》。

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-17 11:37:14

    简单理解就是无论try里的语句是否发生异常,最后都会去执行一遍finaly里面的内容。

    répondre
    0
  • Annulerrépondre