• 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语句,就会抛弃保存的异常。

  • 相关阅读:
    床前思
    捍卫永恒的爱情,注定是一场梦境(转)
    耳朵生豆
    有志人士自行创业之十大策略
    思念熟睡的你
    如何用好云的弹性
    测试一年多,上线就崩溃!微服务到底应该怎么测试?
    解决Tengine健康检查引起的TIME_WAIT堆积问题
    解读容器的 2020:寻找云原生的下一站
    Java 过滤器的作用
  • 原文地址:https://www.cnblogs.com/-wenli/p/11648796.html
Copyright © 2020-2023  润新知