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

【学Python自动化】 8. Python 错误和异常学习笔记

一、错误类型

1 语法错误(解析错误)
  • 最常见的错误类型

  • 解析器会显示出错行和指向错误位置的箭头

  • 示例:


while True print('Hello world')  # 缺少冒号
2 异常
  • 语法正确但执行时触发的错误

  • 不同类型异常:

    • ZeroDivisionError: 除零错误

    • NameError: 未定义变量

    • TypeError: 类型错误

二、异常处理

1 try-except 语句

while True:try:x = int(input("请输入数字: "))breakexcept ValueError:print("无效数字,请重试")
2 工作原理
  1. 执行 try 子句

  2. 无异常则跳过 except

  3. 有异常则匹配 except 子句

  4. 异常不匹配则向外层传递

3 多个 except 子句

try:# 代码
except (RuntimeError, TypeError, NameError):# 处理多种异常pass

####4 异常匹配规则

  • 类匹配包括其派生类的实例

+except 子句顺序很重要(从具体到一般)

5 获取异常信息

try:raise Exception('spam', 'eggs')
except Exception as inst:print(type(inst))    # 异常类型print(inst.args)     # 参数元组print(inst)          # __str__ 输出

三、异常层次结构

  • BaseException: 所有异常的基类

  • Exception: 所有非致命异常的基类

  • 其他特殊异常:SystemExit, KeyboardInterrupt

四、触发异常

1 raise 语句

raise NameError('HiThere')  # 触发异常
raise ValueError            # 简写形式
2 重新触发异常

try:raise NameError('HiThere')
except NameError:print('异常发生!')raise  # 重新触发

五、异常链


try:open("database.sqlite")
except OSError:raise RuntimeError("无法处理错误") from exc  # 异常链

六、用户自定义异常

  • 从 Exception 类派生

  • 命名以 “Error” 结尾

  • 保持简单,主要提供错误信息

七、清理操作

1 finally 子句


try:raise KeyboardInterrupt
finally:print('再见!')  # 总会执行
2 finally 特性
  • 任何情况下都会执行

  • 即使有 return、break、continue

  • 返回值以 finally 中的为准

八、预定义清理(with 语句)


with open("myfile.txt") as f:for line in f:print(line, end="")
# 文件会自动关闭

九、处理多个异常

1 ExceptionGroup

excs = [OSError('error 1'), SystemError('error 2')]
raise ExceptionGroup('存在问题', excs)
2 except* 语法

try:f()
except* OSError as e:print("有 OSErrors")
except* SystemError as e:print("有 SystemErrors")

十、异常注释


try:raise TypeError('类型错误')
except Exception as e:e.add_note('添加额外信息')raise

十一、关键点总结

  1. 区分语法错误和异常

  2. try-except 处理预期内的异常

  3. finally 确保清理操作执行

  4. with 语句自动管理资源

  5. 自定义异常从 Exception 派生

  6. 使用异常链和注释提供更多上下文信息

  7. ExceptionGroup 处理多个不相关异常

这份笔记涵盖了 Python 错误和异常处理的主要概念和用法,可作为学习和参考的快速指南。

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

相关文章:

  • 2025年工科生职业发展证书选择与分析
  • 【模型学习】LoRA的原理,及deepseek-vl2下LoRA实现
  • 力扣242:有效的字母异位词
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等
  • C++类和对象(中)- 默认成员函数
  • 什么是数据库管理系统(DBMS)?RDBMS和NoSQL又是什么?
  • 第 2 讲:Kafka Topic 与 Partition 基础
  • Qwen3-Embedding-0.6B 模型结构
  • Go结构体详解:核心概念与实战技巧
  • Redis-底层数据结构篇
  • MySQL-表的约束(上)
  • 开发中使用——鸿蒙本地存储之收藏功能
  • LLM 能不能发展为 AGI?
  • 开源模型应用落地-模型上下文协议(MCP)-构建AI智能体的“万能插座”-“mcp-use”高级用法(十三)
  • 3.2-C++基础组件
  • 重新审视信任基石:公网IP证书对网络安全生态的影响
  • 【Go语言入门教程】 Go语言的起源与技术特点:从诞生到现代编程利器(一)
  • Cursor 教我学 Python
  • 英伟达Jetson Orin NX-YOLOv8s目标检测模型耗时分析
  • 深度集成Dify API:企业级RAG知识库管理平台解决方案
  • ts,js文件中使用 h函数渲染组件
  • 美国服务器连接速度变慢时应该着重做哪些检查?
  • 双Token实战:从无感刷新到安全防护,完整流程+代码解析
  • PostgreSQL(1) FETCH用法
  • 【MySQL体系结构详解:一条SQL查询的旅程】
  • 《一篇拿下!C++:类和对象(中)构造函数与析构函数》
  • Java 21 虚拟线程 + 分布式调度深度实战:从原理到落地,大促日志同步效率提升 367%
  • 基于SpringBoot的校园资料分享平台
  • Mysql数据库基础(上)
  • 第1章:VisualVM 简介与安装