第十九讲 python中的异常本质-异常定位-异常解决思路

news2024/9/20 0:50:23

目录

1.异常是什么?

 2.异常机制的本质

2.1 本质

2.2 异常对象

2.3 抛出异常

2.4 捕捉异常

 2.5 最终处理

3.异常的解决思路 

3.1 异常定位

3.2 异常解决

1.异常是什么?

  • 异常是指程序在运行时发生的错误或不正常情况。
  • 工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这个文件可能不存在或者文件格式不对;程序在运行 着,但是内存或硬盘可能满了等等。

如下的伪代码:

# 1. 开始程序
开始程序

# 2. 尝试执行可能出错的代码块
尝试:
    # 执行可能引发异常的操作
    打开文件("example.txt")
    读取文件内容
    关闭文件

# 3. 捕捉和处理异常
捕捉 异常(例如,文件未找到异常):
    # 如果发生异常,执行此块中的代码
    输出 "文件未找到,请检查文件路径"

# 4. 无论是否发生异常,都执行的代码
无论如何:
    # 例如,清理操作,如关闭文件
    确保文件已关闭

# 5. 结束程序
结束程序

对应真实Python代码:

try:
    # 尝试打开并读取文件
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    # 如果文件未找到,捕捉异常并输出提示
    print("文件未找到,请检查文件路径")
finally:
    # 这个块中的代码无论是否发生异常都会执行
    print("操作结束")
  • try块中的代码尝试打开一个文件并读取内容。
  • 如果文件不存在,会引发FileNotFoundError异常,except块会捕捉并处理这个异常。
  • finally块中的代码无论如何都会执行,例如用于结束操作或资源的清理。

 2.异常机制的本质

2.1 本质

        异常机制的本质是提供一种结构化的方式来处理程序中的错误和不正常情况。这种机制让程序能够在遇到错误时控制程序的行为,而不是简单地终止程序。

2.2 异常对象

         python中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。

        异常在Python中表示为对象。这些对象继承自内置的BaseException类,具体的异常类如FileNotFoundErrorValueError等都是从BaseException派生出来的。每个异常对象携带了错误的信息和错误的上下文,这些信息可以被捕捉和处理。

        如下展示了python中内建异常类的继承层次:

  

2.3 抛出异常

        当程序检测到错误或需要中断当前操作时,它会“抛出”一个异常。使用raise语句可以显式地抛出一个异常。例如:

raise ValueError("这是一个值错误")

2.4 捕捉异常

        捕捉异常使用tryexcept语句块。try块中的代码是程序正常运行的代码,而except块用于捕捉try块中抛出的异常。程序在try块中遇到异常时,会跳转到相应的except块执行异常处理代码。例如:

try:
    # 可能会抛出异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 异常处理代码
    print("不能除以零")

 2.5 最终处理

        无论是否发生异常,finally块中的代码都会被执行。这通常用于释放资源或执行清理操作,例如关闭文件或网络连接。例如:

try:
    file = open("example.txt", "r")
    content = file.read()
finally:
    file.close()

3.异常的解决思 

3.1 异常定位

  • 当碰到程序异常时,首先查看程序所报的异常错误是什么,然后看程序报的异常信息在哪一行,然后去翻译错误信息,进行修改
  • 有些程序可能知道异常,但是代码过多行数定位不那么清晰,也就是说各种函数嵌套的报错这种,比较简单但有点麻烦的方法就是,从报错的函数的或者行数进行打印一些分隔符,例如,报错的是第100行错误,是一个函数报错,那你就定位到这个函数里面,然后选择函数中的一半或者随便在这个函数某个位置进行打印一些东西,再次执行程序,看我们打印的东西是否打印,如果没有打印,那说明,程序没有执行到我们写的打印的位置,到打印的位置之前就已经报错了,然后把打印语句再次往上次的位置之前再放,以此类推,就能定位到某一行的代码错误,如果是函数里面嵌套的函数报错,也是类似的道理,一层一层的进去定位到错误,然后进行修改

3.2 异常解决

  • 当你定位到函数的具体错误位置时,就可以根据提示的错误信息,例如参数错误、类型错误等等参数进行调整修改,然后查一下,看所用函数和方法是否正确。
  • 如果异常信息比较模糊,你也不理解错误信息,那就将你的错误信息,即报错的最后一行,和定位到的代码所用的函数等,复制到百度去直接搜,因为你碰到的问题,可能别人也碰到过,对于开始学的同学,我们可以把每次碰到的异常信息以及解决的思路去记录下来,这样后面碰到类似的情况,你就能很快去解决。
  • 如果你去看错误信息,也不会去改,也搜不到和你同样的错误信息,那就去找你所做的功能逻辑看是否有类似的,看别人是如何写,或者将你的定位的代码以及错误信息去粘贴到chatgpt中去问问,还是不行,那就只能去多问问人了。
  • 要注意的一点是,程序异常的排查是比较考验耐心,也是累积经验的比较快的方式。

4. 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构中的双向链表

1.链表的分类 链表的结构非常多样,以下情况组合起来就是8种(2x2x2)链表结构: 在带头链表中,除了头结点,其他结点均存储有效的数据。 头结点是占位子的,也叫做“哨兵位”。head结点就是头结点。…

【实战场景】如何优雅实现分页

【实战场景】如何优雅实现分页 开篇词:干货篇:1.添加PageHelper依赖2.添加PageHelper配置3.使用 PageHelper4.自定义Pageable注解 总结:1.执行查询2.处理分页结果3.注意事项 我是杰叔叔,一名沪漂的码农,下期再会&#…

代码随想录算法训练营day49 | 42. 接雨水、84.柱状图中最大的矩形

碎碎念: 参考:代码随想录 42. 接雨水 题目链接 42. 接雨水 思想 如图可以按照列来计算,这样宽度一定是1,只需要计算每一列的雨水的高度接口。而每一列的雨水高度取决于该列左侧最高的主子和右侧最高柱子中最矮的那个柱子的高度…

如何使用Java SpringBoot+Vue搭建半成品配菜平台,实现家庭烹饪新体验

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

用Python编写一个超级玛丽游戏|附源码

​ 编写一个超级玛丽游戏是一个复杂的任务,涉及到多个方面的编程知识和技巧。下面,我将详细讲解如何用Python编写一个简化版的超级玛丽游戏,包括所需的库、游戏逻辑、角色控制、关卡设计、碰撞检测等方面。 所需库 为了编写这个游戏&#…

猫咪去浮毛能一劳永逸吗?手动不行宠物空气净化器是真能做到

现在啊,越来越多的家庭选择养宠物来增添生活乐趣。但宠物带来的快乐背后,也有那么点“小困扰”:下班回家,迎接你的可能是满屋子的“特殊香味”和无处不在的毛发。这样的环境,真的不会对我们的健康产生不良影响吗&#…

照片整理专家,照片整理大师,照片图库整理,智能图片整理软件

前言 业务痛点: 就是我从2015年拥有自己的智能手机之后,就会刻意的对自己拍过的照片、视频,收藏的视频等,媒体元素,进行收集归纳,尝试过很多的存储方案,归纳整理方案 2015年 百度网盘 2016年 时…

电子厂车间的客流统计需要集成哪些硬件设备

在电子厂车间中,准确的客流统计对于生产管理和安全保障至关重要。要实现有效的客流统计,需要集成一系列硬件设备。 首先,客流统计系统主要由以下硬件组成。一是人数采集设备,通常采用红外传感器、双目摄像头等,安装在车…

【时时三省】(C语言基础)数据的额存储

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题1: i>0恒成立 会进入死循环 因为unsigned是无符号数 所以不可能会有负数 就会进入死循环 注意:i打印的时候如果它上面类型是无符号数 但是打印是%d 它会打印有符号数 例题:2 这个循…

【Python开发实践】AI人机对战五子棋——程序调用及运行效果

主函数调用: if __name__ __main__:game Game(version)while True:game.play()pygame.display.update()for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()exit()elif event.type pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y pygame.mou…

基于opencv 纹理图/枯叶图 MTF/ACUTANCE评测算法

1.有SFR算法为何还要引入基于纹理图的MTF/ACUTANCE评测算法? 如果使用的raw数据,只用sfr测试不同频率的mtf是完全可以的。但如果经过isp处理后,因为存在降噪/锐化处理,并不能真正体现纹理和边缘的实际表现。 例如: 在相…

手机运动信息管理系统

目录 一:案例要求: 二:代码:(多文件形式) 1:main.h 2 main.cpp 3 menu.cpp(这个可以拆开写在每一个.cpp里面) 4 功能1用户信息的增删改查.h 5功能1用户信息的增删改查.cpp 6功能2运动信息管理.h 7功能2运动信息…

鸿蒙(API 12 Beta3版)【DRM Kit 简介】数字版权保护

开发者通过调用DRM Kit(Digital Rights Management Kit,数字版权保护服务)提供的接口可以开发播放器应用,实现数字版权保护的基础操作,如设备证书管理、许可证管理、解密操作等;还可以通过接口参数配置完成…

亚马逊铺货ERP国内采集,图片编辑文本翻译一键拉伸,自...

亚马逊全功能 ERP 铺货采集,自动生成 SKU。 说说国内平台采集的商品如何通过 ERP 自己做链接上传发布到亚马逊平台! 1. 首先进入 ERP 插件,直接点击 1688 平台采集自己想做的产品类型。各位按照自身的需求选择搜索的 JK,选择想采…

AI小白福音来啦~Flux文生图,支持手部细节,直出精美图像,让你瞬间变高手!

国产AI绘画软件在近年来发展迅速,其中千鹿设计助手的“Flux 文生图”插件受到了用户的关注。根据搜索结果,Flux文生图插件以其强大的功能和易用性,为设计师提供了便捷的服务。以下是关于Flux文生图插件的测评和使用指南: 工具准备…

【Hot100】LeetCode—160. 相交链表

目录 1- 思路思路 2- 实现⭐160. 相交链表——题解思路 3- ACM 实现 原题连接:160. 相交链表 1- 思路 思路 首先想要找到相交点,需要定义连个指针。两个指针一定得是同步的,例如 A 链表 [1,2,3,4,5] ,链表 B 是 [4,5] 1- 指针对…

<Qt> 界面优化

目录 前言: 背景介绍 一、QSS基本语法 二、QSS设置方式 (一)指定控件样式设计 (二)全局样式设置 (三)从文件加载样式表 (四)Qt Designer 编辑样式 三、选择器 …

​​JVM三:JVM垃圾回收机制(GC)

1.什么是垃圾? 指的是不再使用的内存。 2.垃圾回收 将不用的内存,自动释放,解决内存泄露问题。 3.GC主要针对堆进行释放 GC是以"对象"为基本单位,进行回收,而不是字节。 垃圾回收(GC)主要处理三…

刑事拘留和逮捕在程序上有何区别?

1. 实施条件:刑事拘留是在有重大犯罪嫌疑且存在逃避侦查、串供或者其他妨碍刑事诉讼行为可能的情况下,由公安机关决定采取的临时剥夺人身自由的强制措施。而逮捕则是更为严厉的强制措施,通常在犯罪嫌疑人涉嫌的重大犯罪事实已经查清&#xff…

【贝壳找房】测试开发一面凉经--北京现场面(附面试答案)

1.单链表反转写 单链表是一种线性结构,它是由一个个节点(Node)组成的。并且每个节点(Node)是由一块数据域(data)和一块指针域(next)组成。 节点的数据域:da…