Python异常处理详解:Try-Except语句的完整用法与最佳实践

Noah
Noah
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Python中try复合语句的异常处理机制。涵盖语法错误与运行时异常的区别,演示如何捕获单一异常、多异常元组及所有基类异常。详细讲解else与finally子句的执行逻辑,通过字典操作实例展示如何确保程序在出错时继续运行,并提供完整的代码示例与注意事项。

Python异常处理基础

Python提供了完善的异常处理机制,其中try复合语句是处理运行时错误的核心工具。

在代码执行过程中,可能会遇到各种错误导致解析器中断运行,并输出类似“xxxxErorr”的错误提示及具体描述,这种现象被称为引发异常。

异常的主要作用是告知用户遇到的错误类型,其中“xxxxErorr”代表Python内置的特定异常类型,每种类型都对应独特的错误信息。

一种常见且易于识别的错误是语法错误:SyntaxError。

语法错误源于代码书写不规范,现代集成开发环境(如PyCharm)通常会在编写时通过波浪线提前提示。这类错误类似于文章中的错别字,修正语法即可解决,处理起来相对简单。

Try-Except语句语法与原理

针对异常的处理策略如下:

除了容易修复的语法错误外,其他类型的异常可能不影响核心功能,但为了避免程序因异常而中断执行,我们需要对异常进行捕获和处理。

例如,定义一个包含“光头强”资料的字典personDetail={"name":"光头强"},若尝试访问不存在的键,程序会引发异常并中断执行,导致后续代码无法运行。

为了解决上述问题,需要捕获这些异常并跳过错误点,使程序能够继续执行后续代码。Python通过try语句实现了这一功能。

try语句的基本语法结构如下:

try: 可能发生异常的代码 except 异常类型: 捕获的异常后要执行的代码

try语句的执行逻辑如下:

1)当执行try子句且未发生任何异常时,程序将跳过所有except子句,直接完成try语句的执行。

2)若在执行try子句期间发生异常,程序流程将立即跳转至对应的except子句。

3)执行except子句时,若引发的异常类型与except关键字后指定的类型匹配,则视为成功捕获异常,并执行except子句中的代码。

具体应用示例如下:


gtqDict={"Name":"光头强","Age":34,"Gender":"男"
try:
 print(gtqDict["Weight"])
except KeyError:
 print("Weight不存在,继续走"
print(gtqDict["Age"])
print(gtqDict["Gender"])

 

无论变量weight是否存在,该程序结构均能确保代码完整执行。

多异常捕获与详细信息获取

当无法确定具体会触发哪种异常时,可以采用多异常捕获机制:

将可能发生的多种异常类型以元组形式组合,放置在except关键字之后,以匹配并处理任何可能出现的异常。

例如,若需打印“光头强”的Age键值,但不确定该键是否存在,可捕获KeyError;若不确定键名拼写是否正确,可捕获NameError。

具体代码示例如下:


gtqDict={"Name":"光头强","Age":34,"Gender":"男"
try:
 print(gtqDict["age"])
except (KeyError,KeyError):
 print("age错误"
print(gtqDict["Name"])
print(gtqDict["Gender"])

 

为了便于调试和参考,可以将捕获到的异常具体描述信息打印输出。

try:可能发生异常的代码

except (KeyError,KeyError) as 信息变量:

print(信息变量)

示例代码如下:


gtqDict={"Name":"光头强","Age":34,"Gender":"男"}
try:
 print(gtqDict["Weight"])
except (KeyError,KeyError) as e:
 print(type(e),e)
print(gtqDict["Name"])
print(gtqDict["Gender"])

捕获所有异常

若要捕获所有类型的异常,可采用以下方法:

前文提到的“xxxxErorr”均为Python内置异常类型,且所有异常类型均继承自基类Exception。

在编码时,若无需指定具体异常类型,可直接捕获基类Exception。这样不仅能捕获所有异常,还能输出具体的异常信息,有助于在大范围内定位具体错误。

捕获所有异常的语法如下:

try:可能发生异常的代码

except Excepthon as 信息变量:

print(信息变量)

示例代码如下:


gtq="光头强"
try:
 print(name)
except Exception as e:
 print(type(e),e
print("gtq")

---<class 'NameError'> name 'name' is not defined

---gtq

Else与Finally子句的应用

try语句中还可以包含else子句:

else子句为可选部分,若使用,必须放置在所有except子句之后。

该子句仅在try子句未发生异常时执行。

具体示例如下:


gtq="光头强"
try:
 name=gtq
except Exception as e:
 print(type(e),e)
else:
 print("%s是一个伐木工人"%name)

finally子句位于try语句的末尾。

无论try子句中是否发生异常,finally子句中的代码始终会执行。

示例代码如下:


gtq="光头强"
try:
 name=GTQ
except Exception as e:
 print(type(e),e)
else:
 print("%s是一个伐木工人"%name)
finally:
 print("调用资料结束")

---<class 'NameError'> name 'GTQ' is not defined

---调用资料结束

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。