当前位置: 首页 > ops >正文

【Python基础】异常捕获知识梳理

文章目录

  • 专栏导读
  • 一、异常处理的基本概念
  • 二、基础异常处理语法
    • 1. 处理多个异常
    • 2. 捕获所有异常
  • 三、异常处理的高级用法
    • 1. else子句
    • 2. finally子句
    • 3. 异常链
  • 四、常见的Python内置异常
  • 五、自定义异常
  • 六、异常处理的最佳实践
  • 七、上下文管理器与异常处理
  • 八、调试技巧
    • 1. 使用traceback模块获取完整堆栈信息:
    • 2. 使用logging模块记录异常:
  • 九、性能考量
  • 十、总结

专栏导读

🔥🔥本文已收录于《30天学习Python从入门到精通》

🉑🉑本专栏专门针对于零基础和需要重新复习巩固的同学所准备的一套基础班教学,从0基础到精通Python,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达

🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏,订阅地址:点我直达

一、异常处理的基本概念

在Python编程中,异常(Exception)是指程序运行时发生的错误或意外情况。当Python遇到无法正常执行的代码时,会"抛出"(raise)一个异常。如果不进行处理,程序将终止并显示错误信息。

  • 异常处理的核心目的是:
  • 防止程序意外崩溃
  • 提供友好的错误提示
  • 实现错误恢复逻辑
  • 资源清理保证

二、基础异常处理语法

Python使用try-except语句块来处理异常:

try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:# 处理特定的异常print("不能除以零!")

1. 处理多个异常

try:# 可能引发多种异常的代码value = int(input("请输入一个数字: "))result = 10 / value
except ValueError:print("输入的不是有效数字!")
except ZeroDivisionError:print("不能除以零!")

2. 捕获所有异常

try:# 可能引发异常的代码risky_operation()
except Exception as e:# 捕获所有异常并打印错误信息print(f"发生错误: {e}")

三、异常处理的高级用法

1. else子句

  • 当try块中没有异常发生时,执行else块:
try:result = 10 / 2
except ZeroDivisionError:print("除以零错误")
else:print(f"计算结果: {result}")  # 仅在无异常时执行

2. finally子句

  • 无论是否发生异常都会执行,常用于资源清理:
file = None
try:file = open("example.txt", "r")content = file.read()
except IOError:print("文件操作错误")
finally:if file:file.close()  # 确保文件总是被关闭

3. 异常链

  • Python 3引入了显式的异常链,可以使用raise from:
try:import non_existent_module
except ImportError as e:raise RuntimeError("无法加载必要模块") from e

四、常见的Python内置异常

Python提供了丰富的内置异常类,常见的有:

  • BaseException: 所有异常的基类
  • Exception: 常规错误的基类
  • ArithmeticError: 算术错误基类
  • LookupError: 查找错误基类
  • IOError: 输入/输出错误
  • ValueError: 传入无效参数
  • TypeError: 类型操作错误
  • IndexError: 序列下标越界
  • KeyError: 映射键不存在
  • AttributeError: 属性引用失败
  • ImportError: 导入模块/对象失败

五、自定义异常

通过继承Exception类可以创建自定义异常:

class MyCustomError(Exception):"""自定义异常类"""def __init__(self, message, code):super().__init__(message)self.code = codetry:raise MyCustomError("自定义错误发生", 500)
except MyCustomError as e:print(f"错误代码 {e.code}: {e}")

六、异常处理的最佳实践

具体优于笼统:尽量捕获具体异常,而非笼统的Exception

  • 避免空except块:至少记录错误信息
  • 合理使用finally:确保资源释放
  • 保持try块精简:只包含可能抛出异常的代码
  • 提供有意义的错误信息:方便调试和维护
  • 考虑异常链:保留原始异常上下文
  • 不要滥用异常:常规逻辑控制应使用条件判断

七、上下文管理器与异常处理

Python的with语句实现了上下文管理协议,可以优雅地处理资源:

with open("file.txt", "r") as f:content = f.read()
# 文件会自动关闭,即使发生异常

自定义上下文管理器:

class MyContextManager:def __enter__(self):print("进入上下文")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("退出上下文")if exc_type:print(f"发生异常: {exc_val}")return True  # 抑制异常传播with MyContextManager() as cm:print("在上下文中操作")raise ValueError("测试异常")

八、调试技巧

1. 使用traceback模块获取完整堆栈信息:

import tracebacktry:risky_call()
except:traceback.print_exc()  # 打印完整错误堆栈

2. 使用logging模块记录异常:

import loggingtry:operation()
except Exception as e:logging.exception("操作失败")  # 自动记录堆栈

九、性能考量

  • 异常处理虽然强大,但过度使用可能影响性能:
  • 异常处理比常规条件判断开销大
  • 应避免在频繁执行的循环中使用异常处理逻辑
  • 对于可预见的错误条件,优先使用条件判断

十、总结

Python的异常处理机制提供了强大而灵活的错误管理能力。掌握异常处理不仅能写出更健壮的代码,还能提升程序的用户体验。记住,良好的异常处理不是简单地捕获所有错误,而是有策略地管理预期和非预期的程序状态。 # 总结 -

希望对初学者有帮助 -

致力于办公自动化的小小程序员一枚 -

希望能得到大家的【一个免费关注】!感谢 -

求个 🤞 关注 🤞 -

此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏 -

求个 ❤️ 喜欢 ❤️ -

此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏 -

求个 👍 收藏 👍 -

此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

http://www.xdnf.cn/news/13089.html

相关文章:

  • Device Mapper 机制
  • Redis数据结构选择策略--String?Hash?怎么选?
  • C++ Saucer 编写Windows桌面应用
  • AI——DeepSeek+LangChain+streamlit 实现智能汽车维修服务
  • 视觉slam十四讲实践部分记录——ch2、ch3
  • 字节开源代码模型——Seed-Coder 本地部署教程,模型自驱动数据筛选,让每行代码都精准落位!
  • ​第八章:漏洞里的人间烟火
  • Linux线程与进程关系及底层实现
  • 瑞数信息入选Gartner《中国API管理市场指南》
  • 亚马逊测评,采购环境安全需要解决哪些问题,提高成功率
  • 验证redis数据结构
  • 课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-第一周part2 人工智能术语人工智能公司应该怎么做
  • 恶补电源:1.电桥
  • 【第一章:人工智能基础】01.Python基础及常用工具包-(3)常用数据科学工具包
  • 性能测试分析
  • 深度剖析Diffusion与Transformer在图像生成中的计算逻辑与融合之道
  • 火山引擎云服务器使用感怎么样
  • HarmonyOS运动开发:打造你的专属运动节拍器
  • python打卡day49
  • 大数据学习(135)-Linux系统性指令
  • Windows 环境下,使用 ESP32 JTAG 接口进行固件下载
  • 浅谈互联网主流通信协议
  • 【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
  • 【堆垛策略】设计方法
  • SAP软件年结科目余额结转详解
  • ShuffleNet 改进:与通道注意力机制(CAM)的结合实现
  • 如何用Coze+Fetch快速构建结构化文档
  • deepbayes lecture2:变分推断
  • 【实证分析】上市公司企业风险承担水平数据集(2000-2022年)
  • Houdini POP入门学习06 - 物理属性2