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