Python 基础:错误与异常处理详解
写在前面
在程序执行过程中,因错误或意外原因导致中止的现象非常常见。这些现象统称为「错误」与「异常」。理解并妥善处理它们,是编写健壮代码的关键。
Python 程序在运行过程中可能因语法错误或逻辑问题导致中止,统称为错误与异常。常见异常包括除零错误、名称错误、索引越界及文件读取失败等。Python 提供 try-except-else-finally 机制来捕获和处理异常,确保程序健壮性。开发者应自定义异常类,避免捕获通用异常,利用日志记录错误详情,并结合上下文管理器安全释放资源。正确理解并处理异常是编写高质量 Python 代码的关键。

在程序执行过程中,因错误或意外原因导致中止的现象非常常见。这些现象统称为「错误」与「异常」。理解并妥善处理它们,是编写健壮代码的关键。
语法错误是指代码不符合 Python 语法规则,解释器无法解析。例如缺少冒号、括号不匹配等。
>>> for i in range(5)
File "<stdin>", line 1
for i in range(5)
^
SyntaxError: invalid syntax
上述代码因 for 循环后缺少冒号,导致解释器报错。错误信息会指出文件、行号及错误位置。
逻辑错误指代码能运行但结果不正确。例如算法设计缺陷或输入验证缺失。这类错误通常不会抛出异常,需要开发者通过测试和调试发现。
当 Python 检测到运行时错误时,会抛出异常(Exception),中断当前流程。异常包含跟踪记录(Traceback),显示调用栈、错误位置及类型。
>>> rocky
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'rocky' is not defined
变量必须先赋值才能使用。
>>> a = [1, 2, 3]
>>> a[4]
Traceback (most recent call last):
...
IndexError: list index out of range
>>> b = {'name': 'rocky'}
>>> b['age']
Traceback (most recent call last):
...
KeyError: 'age'
循环条件设置不当常引发此类错误。
>>> f = open('test.txt')
Traceback (most recent call last):
...
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
需确保文件路径正确且存在。
这是最基础的异常处理方式。try 块包裹可能出错的代码,except 块捕获特定异常。
while True:
print('这是一个除法程序。')
a = input("输入 'a' 继续,否则退出:")
if a == 'a':
x = input('第一个数字')
y = input('第二个数字')
try:
result = float(x) / float(y)
print(f'结果:{result}')
except ZeroDivisionError:
print('第二个数字不能为零。')
except ValueError:
print('请输入有效的数字。')
else:
break
若发生异常,程序不会崩溃,而是执行 except 中的逻辑。
可以使用多个 except 子句分别处理不同类型的异常。
try:
# 可能出错的代码
pass
except (ValueError, TypeError) as e:
print(f'类型或值错误:{e}')
except Exception as e:
print(f'未知错误:{e}')
else 块仅在 try 块未发生异常时执行。常用于放置依赖 try 成功执行的后续代码。
try:
print('尝试操作')
except:
print('捕获异常')
else:
print('无异常发生')
finally 无论是否发生异常都会执行,常用于资源清理(如关闭文件、断开数据库连接)。
x = 10
try:
x = 1 / 0
except Exception as e:
print(e)
finally:
print('清理工作')
del x
可以通过继承 Exception 类创建特定业务逻辑的异常。
class InsufficientFundsError(Exception):
def __init__(self, amount, balance):
super().__init__(f"余额不足:{balance},需要:{amount}")
try:
raise InsufficientFundsError(100, 50)
except InsufficientFundsError as e:
print(e)
使用 with 语句可自动管理资源,无需手动调用 close()。
try:
with open('data.txt', 'r') as f:
content = f.read()
except FileNotFoundError:
print('文件未找到')
except:,应指定具体异常类型,防止掩盖系统级错误。logging 模块记录异常堆栈,而非仅打印到控制台。assert 快速验证假设条件。掌握错误与异常处理机制,能有效提升程序的稳定性和用户体验。建议在实际开发中结合日志记录和自定义异常,构建完善的容错体系。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online