异常处理中try,else,finally含有return的情况解析

直接看代码,拿到你的py下运行测试一下就 明白了.

例一:
    def f():
        try:
            print(1)
            return 3
        finally:
            print(2)
            return 0
    print(f())    #120   若注释掉finally内的return  结果为123
    #解释-----一个函数只会有一个返回值,若try和finally同时存在的话,finally会覆盖掉try的return并执行,所以函数结束了.
例二:
    def f():
        try:
            print(1)
            return 1
        except:
            return(2)
        else:
            print(3)
            return 3
        finally:
            print(0)
            return 0
    print(f())
    #总结:如果try下有return的话,若有finally的话,执行finally下的内容,finally内若有return会覆盖操作try下的return;
    若try下没有return,函数正常执行,但是return检测是倒着执行的.
    在含有return的情况下,并不会阻碍finally的执行。

原文地址:https://www.cnblogs.com/dalaoban/p/9481020.html

时间: 2024-10-11 03:20:57

异常处理中try,else,finally含有return的情况解析的相关文章

异常处理中throws和throw的区别?

异常处理中throws和throw的区别: 1.作用不同:throw用于程序员自行产出并抛出异常:throws用于声明在该方法内抛出了异常 2.使用的位置不同:throw位于方法体内部,可以作为单独语句使用:throws必须跟在方法参数列表的后面,不能单独使用. 3.内容不同:throw抛出一个异常对象,且只能是一个:throws后面跟异常类,而且可以有多个 原文地址:https://www.cnblogs.com/suger-4/p/12192418.html

windows 异常处理中VEH、SEH、UEH、VCH 之间的关系

1.当异常交由用户处理时,按照以下顺序调用异常处理方式VEH-〉SEH-〉VCH .2.当VEH表示处理了异常,就不会传递给SEH,但是会传递异常给VCH .3.当VEH没有处理了,就会传递给SEH.4.当SEH的所有异常处理函数没能够处理异常,会调用默认的SEH(就是UEH,只是方式属于SEH)处理函数.5.当SEH处理了异常,从 except 开始执行,就不会再将异常传递给VCH .6.当SEH返回异常产生处执行,在返回之前会调用VCH .注意!!!在 *unix 中是用信号来处理的.所以如

springmvc之异常处理中ExceptionHanderExceptionResolver

1.springmvc通过HandlerExceptionResolver处理程序的异常,包括Handler映射.数据绑定以及目标方法执行时发生的异常. 2.springmvc提供的HandlerExceptionResolver的常用实现类: ExceptionHanderExceptionResolver DefaultHanderExceptionResolver ResponseStatusExceptionResolver SimpleMappingExceptionResolver

PO状态为“处理中”的处理方法

EBS中经常会出现PO提交审批后状态为"处理中"的情况,此时PO创建人无法打开,审批人也无法打开,工作流等查看也无异常,可以使用一下SQL处理再进行审批: --set serveroutput on size 100000DECLARE CURSOR POTORESET IS SELECT WF_ITEM_TYPE, WF_ITEM_KEY, PO_HEADER_ID, SEGMENT1, REVISION_NUM, TYPE_LOOKUP_CODE FROM PO_HEADERS_A

try-catch-finally的含有return使用揭秘

很多人都会纠结这么一个问题try-catch-finally中有return的情况,我自己总结如下: 如果是值类型的话 请看代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 含有return的测试 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 1

批处理中set截取字符详解

set截取字符详解  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们常用的命令之一. 在字符串截取方面,新手因为没能注意到偏移量的问题,很容易提取到错误的字符串,因此,特开此帖,详细解释 set 截取字符的用法. 我们先来看一个例子: set str=123456789 现在,我需要提取变量 str 中的第一个字符,那么,该怎么写命令呢? set var=%str:~1,1%?我想,这很可能是很多粗懂set用法的新手们

批处理中Copy与Xcopy命令的区别(转自:www.jbxue.com)

有关批处理脚本中,copy命令与xcopy命令在用法上的一些区别.原文地址:http://www.jbxue.com/article/14536.html Copy与Xcopy的区别一,copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名说明,这里C:为根目录,bat为子目录),而xcopy能,不过会出现提示,当然可以加参数而不使它提示. C:\>copy c:\bat\hai.bat d:\bat\hello.bat提示:系统找不到指定的路径. 已复制 0 个文件.可以这样: C:\

【转】case: Java中try catch finally语句中含有return语句的执行情况(总结版)

Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): [java] view plain copy public class TryTest{ public 

Java中try catch finally语句中含有return语句的执行情况

finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static