zoukankan      html  css  js  c++  java
  • try,except,finally的用法

    try,except,finally

    try...except形式:指定一个或多个异常处理器(异常子句).。

    当在try子句中没有异常发生时,,异常处理器将不被执行.

    当在try子句中有异常发生时,首先会执行except搜索异常处理器,它会按顺序搜索直到第一个匹配的处理器找到为止.。

    如果在except后面找到对应的异常声明,就会处理。

    如果没有找到,异常就会被临时保存起来,然后去执行finally语句,但如果finally中产生了新的异常或者执行了return或者break语句,那么临时保存的异常将会被丢失,如果finally没有上面的情况,最后就会抛出保存的异常。

    注意:一般我们会将一个没有指定异常的except语句, 它必须放在最后, 它会匹配任何异常并处理。

    try...finally形:式指定一个清除处理器. 在执行try语句块没有异常发生时, finally子句被执行.在异常引发时, 该异常就被临时保存起来, finally也被执行, 然后暂存的异常被重新引发.

    如果执行finally子句时引发了另一个异常或执行了return或break语句, 就会抛弃保存的异常,在finally子句中的continue语句是非法的(这么做的原因是当前实现的原因 ---- 这个限制可能也会保留下去)在执行finally子句时异常信息是无效的.  

    简单总结

    1.当执行try...except之间的语句序列没有发生异常时,则忽略异常处理部分(except)的语句。

    2、Except括起来的语句,则只有在产生异常的情况下会被执行,其他情况一概不执行的。 

    3、Finally括起来的语句是铁定会被执行的,无论是否有异常产生;

    面试题1

    def func():
        try:
            return 123
        finally:
            return 321
    print(func())#结果:321
     
    def func():
        try:
            return 123
        finally:
            print(321)
    print(func())#结果321 123

    finally有一个特性,那就是无论如何,finally中的代码都将被执行,那么当执行到try中return的时候函数fun将被结束返回,这个时候由于finally的特性,try中的return 'try return' 经暂时被挂起,当执行完finally中的语句之后再返回执行,可finally中却执行了另一个return,导致了函数直接结束了,此时try中的finally就被丢失了。所有在我们的实际开发中我们应尽量避免在finally使用return语句返回。

    面试题2

    def fun():
        try:
            print('try--start')
            a = 1/0
        except ValueError as ret:
            print(ret)
        finally:
            return 'finally'
     
    print(fun())
    #结果
    try
    --start finally

    如果在except中没有捕获异常,异常会被保存起来,当finally子句时引发了另一个异常或执行了return或break语句,就会抛弃保存的异常。

  • 相关阅读:
    angular、vue使用感受
    API网关在API安全性中的作用
    分享一个国内首个企业级开源的GO语言网关--GoKu API Gateway
    几种部署Goku API Gateway的方式,最快一分钟可使用上网关
    热门开源网关的性能对比:Goku > Kong > Tyk
    如何通过网关做服务编排?
    未来实现API管理系统的几个关键词
    关于未来实现API管理系统的几个关键词
    让API实现版本管理的实践
    医疗行业如何使用API市场?
  • 原文地址:https://www.cnblogs.com/-wenli/p/11648796.html
Copyright © 2011-2022 走看看