首页 > 其他分享 >try-except-else-finally

try-except-else-finally

时间:2023-07-22 11:34:22浏览次数:39  
标签:代码 except try finally print 异常

 1 '''
 2 1. 语法:
 3     try:
 4         # 可能引发异常的代码
 5     except ExceptionType1:
 6         # 处理异常类型1的代码
 7     except ExceptionType2:
 8         # 处理异常类型2的代码
 9     else:
10         # 如果没有发生异常,执行此处的代码
11     finally:
12         # 无论是否发生异常,都会执行此处的代码
13 
14     1. 日常工作中,每次处理异常时都要尽可能把except、else、finally语句写全了。
15     2. try块包含了可能引发异常的代码。如果在try块中引发了一个异常,则会转到相应的except块进行异常处理。可以有多个except块来处理不同类型的异常。
16     3. else块是可选的,只有当没有发生任何异常时才会执行其中的代码。
17     4. finally块也是可选的,无论是否发生异常,都会执行其中的代码。通常在这里进行清理工作,如关闭文件或释放资源。
18 
19 2. 最佳实践值得考虑:
20     1. 精确捕获异常:根据具体情况捕获特定类型的异常,而不是简单地使用通用的Exception。这有助于提供更准确的错误处理。
21     2. 使用else块进行干净的逻辑:将没有异常的逻辑放在else块中,以使代码更清晰和易读。
22     3. 利用finally块进行资源清理:在finally块中执行必要的资源清理操作,以确保资源的正确释放。
23 
24 3. 在try-except-else-finally结构中,代码的执行顺序如下:
25     1. 首先,程序执行try块中的代码。
26     2. 如果在try块中没有引发异常,则跳过所有的except块,直接执行else块中的代码。注意,只有当没有任何异常时才会执行else块。
27     3. 如果在try块中引发了一个异常,并且该异常与某个except块中指定的异常类型匹配,则执行对应的except块中的代码。只会执行与第一个匹配的异常类型相对应的except块,其他的except块将被忽略。
28     4. 无论是否发生异常,最后都会执行finally块中的代码。finally块中的代码始终会被执行,无论之前是否有异常发生。
29 
30 总结起来,try块中的代码始终会被执行。如果没有异常发生,那么会继续执行else块中的代码。如果发生了异常并匹配到相应的except块,那么会执行该except块中的代码。最后,不管是否发生异常,都会执行finally块中的代码。
31 
32 需要注意的是,在执行完finally块中的代码后,异常(如果有)仍然会向上层传播,除非在finally块中使用了return、break或continue等中断语句。
33 '''
34 
35 try:
36     num1 = int(input("请输入一个整数: "))
37     num2 = int(input("请输入另一个整数: "))
38     result = num1 / num2
39 except ValueError:
40     print("输入无效的整数")
41 except ZeroDivisionError:
42     print("除数不能为零")
43 else:
44     print("结果:", result)
45 finally:
46     print("程序执行完毕")
 1 # 要注意的是,在执行完finally块中的代码后,异常(如果有,并且没有捕获)仍然会向上层传播,除非在finally块中使用了return、break或continue等中断语句
 2 def divide(a, b):
 3     try:
 4         result = a / b
 5         return result
 6     # except ZeroDivisionError:  # 捕获处理了,就不会往外抛了
 7     #     print("除数不能为零")
 8     except TypeError:
 9         print("类型错误")
10     finally:
11         print("执行finally块")
12         # 因为没有捕获ZeroDivisionError,当发生了此异常,可通过return、break或continue中断向上层传播
13         return "执行了finally块的返回值"  # 如果注释此句,第19行的语句print("捕获到异常:", e)会被执行
14 
15 
16 try:
17     res = divide(10, 0)
18 except Exception as e:
19     print("捕获到异常:", e)  # 如果divide函数没有吃掉异常,此处就会捕获到异常: division by zero

在finnally使用了return注意返回值

 1 def divide(a, b):
 2     try:
 3         result = a / b
 4         return result
 5     # except ZeroDivisionError:  # 捕获处理了,就不会往外抛了
 6     #     print("除数不能为零")
 7     except TypeError:
 8         print("类型错误")
 9     finally:
10         print("执行finally块")
11         # 因为没有捕获ZeroDivisionError,当发生了此异常,可通过return、break或continue中断向上层传播
12         return "执行了finally块的返回值"  # 如果注释此句,第51行的语句print("捕获到异常:", e)会被执行
13 
14 
15 try:
16     # res = divide(10, 0)
17     res = divide(10, 5)
18     print(res)
19 except Exception as e:
20     print("捕获到异常:", e)  # 捕获到异常: division by zero

输出:

 

标签:代码,except,try,finally,print,异常
From: https://www.cnblogs.com/allenxx/p/17573066.html

相关文章

  • 到主机 的 TCP/IP 连接失败 java.net.ConnectException: Connection timed out
    org.apache.commons.dbcp.SQLNestedException:CannotcreatePoolableConnectionFactory(到主机的TCP/IP连接失败。java.net.ConnectException:Connectiontimedout:connect) 1、网络配置tcp/IP没有打开2、防火墙3、连接地址写错(工程文件中数据库连接写正确了,不代表编......
  • Hibernate初始化时在OneToOneSecondPass类中出现NullPointerException
    启动项目 Hibernate随即报错Causedby:java.lang.NullPointerException   atorg.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)  原因: 主类方,无外键方@OneToOne(mappedBy="carveEReviewproject",targetEntity=CarveEReviewcomment.cla......
  • System.NullReferenceException[转] 解决方法总和
    “System.NullReferenceException:未将对象引用设置到对象的实例”问题可能原因如下:1、ViewState对象为Null。2、DateSet空。3、sql语句或Datebase的原因导致DataReader空。4、声明字符串变量时未赋空值就应用变量。5、未用new初始化对象。6、Session对象为空。7、对控件赋文本......
  • (_mysql_exceptions.OperationalError) (2061, 'RSA Encryption not supported -
    RSA加密与数据库操作的关系在进行数据库操作时,我们有时会遇到类似于“(_mysql_exceptions.OperationalError)(2061,'RSAEncryptionnotsupported'”的错误提示。这个错误提示通常表示我们正在尝试使用RSA加密算法进行数据库操作,但是数据库不支持RSA加密。本文将介绍RSA加密算......
  • 题解 P4955 【[USACO14JAN]Cross Country Skiing S】
    postedon2021-02-2710:04:32|under题解|source这道题其实没有绿这么难,只需要二分+搜索就行了。读入。注意尽量不要用scanf读入bool,这好像是UB,可以用一个变量\(x\)存输入的数,然后直接类型转换。二分。套模版就行了,等一下我们再写\(\operatorname{check}()\)函......
  • 错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseExcepti
    错误连接数据库[mysql]:org.pentaho.di.core.exception.KettleDatabaseException是一种常见的错误,通常在使用PentahoDataIntegration(PDI)工具连接到MySQL数据库时出现。本文将介绍这个错误的原因,以及如何解决它。在使用PDI工具连接到MySQL数据库时,经常会遇到数据库连接失败的......
  • TryHackMe | Relevant Writeup
    TryHackMe|RelevantWriteup信息收集有2个Web服务(80/tcp、49663/tcp)以及网络共享(445/tcp和rdp的3389端口。有个nt4wrksv,连接看看有一个密码文件,打开是base64解码Bob-!P@$$W0rD!123Bill-Juw4nnaM4n420696969!$$$ 想着拿密码先连接一波,直接就开始连接3389,......
  • 升级EF7连接SQL server出错SqlException: A connection was successfully established
    今天把项目里的Microsoft.EntityFrameworkCore.SqlServer和Microsoft.EntityFrameworkCore.Tools从6.0.6升级到了最新的7.0.9。一运行程序出错了。Win32Exception:证书链是由不受信任的颁发机构颁发的。UnknownlocationSqlException:Aconnectionwassuccessfullyestab......
  • Android编译报错Caused by: java.lang.RuntimeException: Manifest merger failed wit
    Android编译报错Causedby:java.lang.RuntimeException:Manifestmergerfailedwithmultiple这种异常一般是引用了aar,如果项目中的manifestapplication配置和aar中不一样就会报错,比如android:icon和aar中不一致,则添加tools:replace="android:icon"配置即可。......
  • java mongo 插入geometry 多边形 线 点
    importcom.mongodb.client.MongoCollection;importcom.mongodb.client.model.geojson.LineString;importcom.mongodb.client.model.geojson.Point;importcom.mongodb.client.model.geojson.Polygon;importcom.mongodb.client.model.geojson.Position;importcom.tusvn.cc......