12.Python异常
Python异常处理完全指南从基础语法到高级技巧异常处理是Python编程中至关重要的概念它允许程序在遇到错误时优雅地恢复或提供有用的错误信息。本文将基于提供的代码文档全面讲解Python异常处理的核心机制和最佳实践。1. 常见的Python异常类型1.1 基础运算异常# ZeroDivisionError: 除数为零 result 10 / 0 # 错误不能除以零 # NameError: 变量未定义 print(x) # 错误变量x未声明 # AttributeError: 对象没有该属性 print(len(x)) # 错误x没有len()方法1.2 类型与值异常# TypeError: 类型错误 print(len(10)) # 错误整数没有长度 # ValueError: 值错误 print(int(a)) # 错误a无法转换为整数 # IndexError: 索引越界 print(x[10]) # 错误列表索引超出范围1.3 容器与系统异常# KeyError: 字典键不存在 print(dict(a1)[b]) # 错误键b不存在 # OverflowError: 数值溢出 print(2 ** 1000) # 大数计算可能溢出 # MemoryError: 内存不足 while True: print(1) # 无限循环导致内存耗尽1.4 文件操作异常# FileNotFoundError: 文件不存在 with open(my_file.txt, r) as f: print(f.read()) # 错误文件不存在 # IOError: 输入输出错误 with open(my_file.txt, w) as f: f.write(Hello World) # 可能因权限等问题失败 # OSError: 操作系统错误 import os os.mkdir(my_dir) # 创建目录可能失败 os.remove(my_file.txt) # 删除文件可能失败2. 基础异常处理语法2.1 try-except基本结构try: # 尝试执行的代码块 result 10 / 0 except ZeroDivisionError: # 当发生ZeroDivisionError时执行 print(不能除以零)2.2 多异常捕获try: result 10 / int(input(请输入一个数字: )) except ValueError: print(输入的不是一个有效的数字) except ZeroDivisionError: print(不能除以零)3. 完整的异常处理流程3.1 使用else子句try: result 10 / int(input(请输入一个数字: )) except ValueError: print(输入的不是一个有效的数字) except ZeroDivisionError: print(不能除以零) else: # 只有当try块成功执行时才运行 print(结果是:, result)3.2 使用finally子句try: result 10 / int(input(请输入一个数字: )) except ValueError: print(输入的不是一个有效的数字) except ZeroDivisionError: print(不能除以零) finally: # 无论是否发生异常都会执行 print(操作完成。)4. 高级异常处理技巧4.1 异常的捕获和重新抛出try: result 10 / int(input(请输入一个数字: )) except ValueError as e: print(输入的不是一个有效的数字) raise # 重新抛出原始异常 except ZeroDivisionError as e: print(不能除以零) raise e # 重新抛出捕获的异常4.2 获取异常信息try: result 10 / int(input(请输入一个数字: )) except Exception as e: print(f发生错误: {type(e).__name__}) print(f错误信息: {e})5. 实际应用场景5.1 文件操作异常处理try: with open(config.txt, r) as f: content f.read() except FileNotFoundError: print(配置文件不存在使用默认配置) except PermissionError: print(没有文件读取权限) except IOError as e: print(f文件读取错误: {e})5.2 网络请求异常处理import requests try: response requests.get(https://api.example.com/data, timeout5) response.raise_for_status() # 如果HTTP请求返回不成功的状态码则抛出异常 data response.json() except requests.exceptions.Timeout: print(请求超时) except requests.exceptions.ConnectionError: print(网络连接错误) except requests.exceptions.HTTPError as e: print(fHTTP错误: {e.response.status_code}) except ValueError: print(响应内容不是有效的JSON)5.3 数据库操作异常处理import sqlite3 try: conn sqlite3.connect(database.db) cursor conn.cursor() cursor.execute(SELECT * FROM users WHERE id ?, (user_id,)) user cursor.fetchone() except sqlite3.OperationalError as e: print(f数据库操作错误: {e}) except sqlite3.IntegrityError: print(数据完整性错误) finally: if conn in locals(): conn.close() # 确保数据库连接关闭6. 自定义异常类class ValidationError(Exception): 自定义验证异常 def __init__(self, message, fieldNone): self.message message self.field field super().__init__(self.message) def validate_age(age): if not isinstance(age, int): raise ValidationError(年龄必须是整数, age) if age 0 or age 150: raise ValidationError(年龄必须在0-150之间, age) # 使用自定义异常 try: validate_age(-5) except ValidationError as e: print(f验证错误: {e.message} (字段: {e.field}))7. 最佳实践总结精确捕获异常避免使用裸露的except:应该捕获具体的异常类型提供有用的错误信息帮助用户理解问题所在资源清理使用finally或上下文管理器确保资源正确释放异常链在重新抛出异常时保留原始堆栈信息日志记录在生产环境中应该记录异常而非直接打印import logging try: # 业务代码 result risky_operation() except Exception as e: logging.error(操作失败, exc_infoTrue) # 给用户的友好提示 print(操作失败请稍后重试)结语异常处理是编写健壮Python应用程序的关键。通过合理使用try-except结构、正确捕获特定异常类型、实现资源清理机制可以显著提高程序的稳定性和用户体验。掌握这些异常处理技巧将使你能够编写出更加专业和可靠的Python代码。

相关新闻

引入AI辅助的3D游戏美术工作流

引入AI辅助的3D游戏美术工作流

不同于其他类型的AI应用,3D内容的AI生成应用所面向的行业更加垂直,会有一定的专业使用门槛,并且生成的产物与直接投入生产环境的内容往往还存在一定的距离。笔者这里针对小型独立游戏/Demo的场景下,为提高3D游戏美术工作效率和降低…

2026/7/6 12:31:46 阅读更多 →
ZOOM为啥不稳定,经常断线,或者听不到对方声音,看不到对方图像,到底为啥?

ZOOM为啥不稳定,经常断线,或者听不到对方声音,看不到对方图像,到底为啥?

ZOOM为啥不稳定,经常断线,或者听不到对方声音,看不到对方图像,到底为啥?

2026/7/5 3:58:11 阅读更多 →
Python入门:从安装到第一个程序

Python入门:从安装到第一个程序

好的,我们来梳理一下Python的基础与环境配置要点: 1. Python 是什么? Python 是一种高级编程语言,以简洁易读的语法著称。它支持多种编程范式(面向对象、函数式等),广泛应用于数据分析、人工智…

2026/7/3 16:46:38 阅读更多 →

最新新闻

YOLOv10模型改进-特定领域应用-第96篇:YOLOv10改进策略【特定领域应用】| YOLOv10在无人机巡检中的应用

YOLOv10模型改进-特定领域应用-第96篇:YOLOv10改进策略【特定领域应用】| YOLOv10在无人机巡检中的应用

一、本文介绍 本文记录的是YOLOv10在无人机巡检领域的应用。无人机巡检需要检测电力设施、道路状况、建筑物损伤等目标,YOLOv10凭借其高效的推理速度和准确的检测能力,成为无人机巡检领域的首选目标检测算法。 二、无人机巡检场景分析 2.1 检测目标 无人…

2026/7/6 14:45:39 阅读更多 →
路由模式:智能分发 + 垂直 Agent

路由模式:智能分发 + 垂直 Agent

路由模式:智能分发 垂直 Agent路由模式的核心是智能分发——根据任务类型、内容或上下文将请求路由到不同的垂直 Agent。读完你能设计出适配多种场景的路由层,理解分类器精度与兜底策略的关键 trade-off。一、概念速查 1.1 什么是路由模式 路由模式&…

2026/7/6 14:45:39 阅读更多 →
用 grill-me 推导盘前简报 MVP:12 题钉边界 + schema 收束

用 grill-me 推导盘前简报 MVP:12 题钉边界 + schema 收束

1. grill-me skill是什么、解决什么问题 grill-me skill 的核心就一条:一次只问一个问题,沿决策树把你逼到边界清楚。 和普通「帮我设计一个系统」的区别:普通对话grill-meAI 一次吐完整方案逐题确认,你不同意就改容易过度工程每题…

2026/7/6 14:45:39 阅读更多 →
web应用技术作业8+web应用技术作业9

web应用技术作业8+web应用技术作业9

发文达到上限,合并作业web应用技术作业8实现自己项目中的一个增删改查的页面的查询和删除功能的页面:1)撰写接口文档2)建立apifox接口3)撰写新建数据库表的sql语句,并新建好数据库表4)撰写前端页…

2026/7/6 14:43:34 阅读更多 →
PIC18F56K42与TPS6281x的数字DC-DC电源设计指南

PIC18F56K42与TPS6281x的数字DC-DC电源设计指南

1. 项目背景与核心器件选型在嵌入式电源管理领域,数字控制DC-DC转换器正逐渐取代传统模拟方案。这次我们要实现的方案采用Microchip的PIC18F56K42单片机控制TI的171010550同步降压转换器,构建一个高效可编程的电源系统。这个组合在工业控制、物联网设备供…

2026/7/6 14:41:34 阅读更多 →
面了三年Android,我用Handler一道题就能筛掉80%的候选人

面了三年Android,我用Handler一道题就能筛掉80%的候选人

我做Android面试官三年了。 面过的候选人少说也有两三百个,从校招到十年经验的架构师都有。一开始我还会准备七八个问题轮着问,后来发现——不用那么麻烦。 一道Handler,追问四层,足够我把一个人看得透透的。 不是Handler有多难。恰恰相反,它太基础了,基础到每个Andro…

2026/7/6 14:41:33 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻