第7章 Python异常处理_第1页
第7章 Python异常处理_第2页
第7章 Python异常处理_第3页
第7章 Python异常处理_第4页
第7章 Python异常处理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python基础教程第7章:异常处理目录异常处理机制:try/except/finally常见异常类型解析自定义异常类异常链与上下文调试技巧与错误定位实战案例:安全读取配置文件常见问题与最佳实践异常处理机制:try/except/finallyPython核心错误处理结构解析什么是异常?异常(Exception)程序运行时发生的错误事件。会中断正常的执行流程。例如:除以零、文件不存在、类型不匹配。语法错误(SyntaxError)代码编写不符合Python语法规则。程序未运行就会报错,无法执行。例如:缺少冒号、缩进错误、拼写错误。语法错误是代码写错了,程序无法启动;而异常是代码语法无误,但执行中遇到了逻辑错误。异常处理的核心流程执行try块程序首先执行`try`块中的代码。捕获except块若发生异常,跳转至匹配的`except`块处理。执行else块若`try`块无异常,执行`else`块代码。执行finally块无论是否异常,`finally`块代码总会执行。基础捕获:try-except作用捕获并处理指定类型的异常,防止程序崩溃。语法try:#可能会出错的代码块risky_code()exceptSpecificExceptionase:#异常处理逻辑代码示例try:result=10/0exceptZeroDivisionErrorase:print(f"错误:{e}")print("除数不能为零!")输出结果错误:divisionbyzero除数不能为零,请检查输入!通过`ase`可以捕获异常对象,获取详细的错误信息,从而进行更精准的处理。捕获多个异常方法一:多个except块为不同类型的异常提供不同的处理逻辑。try:num=int(input("请输入一个数字:"))result=10/numexceptValueError:print("输入的不是有效数字!")exceptZeroDivisionError:print("除数不能为零!")方法二:元组形式当多种异常的处理逻辑相同时,可以合并捕获。try:num=int(input("请输入一个数字:"))result=10/numexcept(ValueError,ZeroDivisionError)ase:print(f"输入无效:{e}")精确处理为不同异常提供定制化提示,提升用户体验。代码简洁合并同类异常处理逻辑,使代码更精炼。完善的异常结构:else与finally代码示例try:file=open("data.txt","r")content=file.read()exceptFileNotFoundError:print("文件未找到。")else:print(f"文件内容:{content[:50]}...")finally:file.close()#确保资源被释放else块:成功的后续当try块内的代码没有发生任何异常时执行。finally块:最后的保障无论是否发生异常,总会被执行,用于清理资源。实际应用在Python中,更推荐使用with语句自动管理文件等资源。try...except...else...finally构成了Python中强大而完整的异常处理机制。常见异常类型解析语法错误(SyntaxError)代码违反Python语法规则,如缺少冒号或括号不匹配。名称错误(NameError)引用了未定义的变量或函数名称。索引错误(IndexError)尝试访问列表、元组等序列中不存在的索引。键错误(KeyError)尝试访问字典中不存在的键。常见异常类型(一)异常类型触发场景示例代码`ZeroDivisionError`除数为0`10/0``TypeError`数据类型不匹配`"age:"+25``ValueError`数据类型正确但值无效`int("abc")``FileNotFoundError`打开不存在的文件(读模式)`open("missing.txt","r")`常见异常类型(二)异常类型触发场景示例代码IndexError列表/元组索引超出范围lst=[1,2];lst[3]KeyError访问字典中不存在的键d={"name":"Alice"};d["age"]AttributeError访问对象不存在的属性/方法s="Python";s.unknown_method()NameError使用未定义的变量print(undefined_variable)3.自定义异常类为何需要自定义异常?Python内置异常虽已丰富,但在特定业务场景下,创建自定义异常能更精准地描述和处理问题,使代码更具可读性和可维护性。classInvalidAgeError(Exception):pass#示例:自定义年龄无效异常自定义异常目的创建特定领域的异常,使错误信息更具可读性和针对性。方法自定义异常类必须继承自`Exception`类(或其子类)。代码示例classInvalidAgeError(Exception):"""年龄不合法时抛出"""def__init__(self,age,msg="年龄必须在0-150之间"):self.age=age;self.message=msgsuper().__init__(self.message)try:raiseInvalidAgeError(200)exceptInvalidAgeErrorase:print(f"错误:{e}")输出:错误:年龄必须在0到150之间,你输入的是2004.异常链与上下文在捕获异常后抛出新异常时,保留原始异常上下文信息,以便于调试和问题定位。保留上下文完整追溯异常根源增强调试提供完整调用堆栈信息异常链作用在抛出新异常时,保留原始异常的堆栈信息,提供更完整的错误上下文。语法raise新异常from原始异常代码示例defread_config():

try:

open("config.json")

exceptFileNotFoundErrorase:

raiseRuntimeError("启动失败")frome输出效果Theaboveexceptionwasthedirectcauseofthefollowingexception:5.调试技巧与错误定位掌握核心调试方法,高效解决程序难题常用调试技巧1.阅读堆栈追踪(Traceback)从下往上读,最后一行是错误类型和描述。上面的行显示了错误发生的调用栈,包括文件名和行号。2.使用`print()`或`logging`在关键位置打印变量的值,确认程序状态。推荐使用`logging`模块代替`print()`,可灵活控制日志级别。3.使用断言(assert)在代码中插入检查点验证假设。`assertcondition,msg`,若条件不成立则抛出`AssertionError`。4.使用IDE调试器在VSCode、PyCharm中设置断点,单步执行,实时查看变量与调用栈,是最强大的调试工具。实战案例:安全读取配置文件综合运用所学知识,处理真实场景下的异常与边界情况实战案例:安全读取JSON配置需求分析文件不存在处理

捕获FileNotFoundError异常JSON格式校验

捕获JSONDecodeError异常关键字段验证

确保配置完整性Python实现importjsondefload_config(file_path):try:...#处理文件不存在try:...#处理格式错误forkeyinrequired_keys:...#验证关键字段returnconfig核心思想:多层次、全方位地进行异常处理,确保程序在各种异常情况下都能优雅降级并提供清晰的错误信息。常见问题与最佳实践遵循这些实践,可以让我们的代码更加健壮、易读和易于维护。异常处理最佳实践捕获具体的异常避免使用`exceptException`,这会掩盖真正问题。应捕获如`FileNotFoundError`等具体类型。提供有意义的错误信息让用户或开发者能快速理解问题所在,加速调试过程。不要忽略异常绝对不要使用空的`except`块,这会导致错误无声失败,极其难以调试。使用`finally`或`with`清理资源确保文件、网络连接等资源被正确释放,避免资源泄露。自定义异常继承自`Exception`不要继承自`BaseException`,它是为系统级异常预留的。记录异常信息使用`logging`模块记录堆栈信息,便于生产环境问题分析。课后实操任务任务描述实现一个函数`calculate_average(file_path)`,该函数读取一个包含数字的文本文件(每行一个数字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论