Python异常处理中else与finally关键字详解

阿橙
阿橙
发布时间:2026-10-13 | 2人浏览过
原创

本文深入解析Python中try-except语句块内else与finally关键字的具体行为。else子句在try块未发生异常时执行,而finally子句无论是否发生异常均会执行。通过具体代码示例,阐明两者在异常捕获、程序终止及资源清理场景下的应用逻辑与执行优先级。

Python通过try-except结构实现异常处理机制。当try块中发生的异常被对应的except子句捕获时,后续代码将继续执行;若try块中的异常未被except处理,程序将抛出Traceback并终止运行。else和finally关键字正是针对这两种不同执行路径所设计的控制语句。

else子句

在try-except结构中,若try块执行期间未发生任何异常(即except子句未被触发),系统将自动执行else子句中的代码。

相反,若try块中触发了异常且该异常在except子句中被定义并处理,则程序将执行except中的逻辑,而跳过else子句。

以下代码在Python 3环境中运行通过。

try:
  a = 1 / 0
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

由于代码中触发了异常(除以零),程序进入except分支进行处理。

此时不执行else子句。

输出结果:Division is 0 ,Wrong!

try:
  a = 1 / 1
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

同理,若try块中未发生异常,程序将执行else子句。

输出结果:Program is running here!

因此,当try块中的异常在except子句中被明确处理时:

在try-except-else结构中,若执行了except子句,则不执行else;若执行了else子句,则说明未触发except。

另一种理解方式是:

try-except用于处理预期内的错误;若try-except未捕获到错误(即无异常发生),则属于“正常情况”,此时执行else子句。

finally子句

若try块中发生的异常未在except子句中被处理,系统将抛出Traceback(默认错误信息)并终止程序,后续代码不再执行。但若存在finally子句,程序会在抛出Traceback之前(即程序结束前)执行finally中的语句。此机制对于必须执行的收尾操作(如关闭文件句柄、释放内存空间等)非常有用。

try:
  a = 1 / '1'
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

该程序将输出Traceback信息: Traceback (most recent call last): File “*********************, line 2, in a = 1 / ‘1' TypeError: unsupported operand type(s) for /: ‘int' and ‘str'

由于try块中的异常未在except子句中被处理,若修改程序如下:

try:
  a = 1 / '1'
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
finally:
  print("Program is running here!")

输出结果:

Traceback (most recent call last): File “********************”, line 2, in a = 1 / ‘1' TypeError: unsupported operand type(s) for /: ‘int' and ‘str' Program is running here!

可见,即使Traceback异常未被消除,print语句依然被输出。这体现了finally子句作为程序收尾工作的特性。

此外,即使程序运行没有任何错误,finally子句也会被执行。

因此可以这样理解:

无论程序是否发生异常,finally子句中的语句必定执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表