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

暑假Python基础整理 --异常处理及程序调试

异常概念


在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。如下表是Python常见的异常与描述:

异常描述
NameError尝试访问一个未声明的变量引发错误
IndexError索引超出序列范围引发错误
IndentationError缩进错误
ValueError传入的值错误
KeyError请求一个不存在的字典关键字引发的错误
IOError输入输出错误(如要读取的文件不存在)
ImportError当import语句无法找到模块引发的错误
AttributeError当尝试访问位置的对象属性时,引发的错误
TypeError类型不合适引发的错误
MemoryError内存不足
ZeroDivisionError当除数为0时引发的错误

异常处理语句


try...except 语句

使用try...except语捕获并处理异常时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中:若try执行时出现错误,将会执行except语句块,否则将不执行except语句块,语法结构如下:

try:block1
except [ExceptionName [as alias]]:block2
  • block1:表示可能报错的代码块
  • ExceptionName [as alias]:可选参数,用于指定要捕获的异常。[as alias]表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容
  • block2:表示进行异常处理的代码块

在捕捉异常时,如果需要同时处理多个异常,可以在except语句后面使用()将可能出现的异常括起来,间隔使用逗号分割。

try...except...else 语句

还有一种方式是在try...except的基础上加上else子句,用于指定当try语句没有发现异常时要执行的语句。当在try语句执行过程中未发现异常,则执行else子句,否则将不执行。

try...except...finally 语句

完整的异常处理语句应该包含finally代码块,通过情况下,无论程序执行是否出现异常,而finally语句都将会执行。其语法格式如下:

try:block1
except [ExceptionName [as alias]]:block2
finally:block3
使用 raise 语句抛出异常

如果某个函数或者方法可能会产生异常,但不想在当前函数或者方法中处理这个异常,则可以使用 raise 语句在函数或者方法中抛出异常,其语法格式如下:

raise [ExceptionName[(reason)]]
  • ExceptionName [(reason)]:可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。若省略,就会把当前的错误原样抛出。
  • reason:参数reason可以省略,若省略,则在抛出异常时,不附带任何描述信息。

程序调试


使用 IDLE 进行程序调试

1.首先打开IDLE Shell窗口,在主菜单选择 Debug -> Debugger 菜单项,将打开Debug Control 对话框,同时IDLE Shell 窗口将显示[DEBUG ON]表示已处于调试状态。如下图:

在这里插入图片描述

2.然后在IDLE Shell窗口中选择 File -> Open 菜单项,打开需要调试的文件,然后在想要添加断点的行上右击选择 Set Breakpoint菜单项可以添加断点,在想要取消断点的行上右击选择 Set Breakpoint菜单项可以取消断点。添加断点的行将以黄色底纹标记,如下图:

在这里插入图片描述

3.在添加所需的断点(添加断点的原则是:程序执行到这个位置时,想要查看某些变量的值,就在这个位置添加一个断点)后,按F5键,执行程序,这是Debug Control对话框中显示程序的执行信息,选择Globals复选框,将显示全局变量,默认只显示局部变量。如下图:

在这里插入图片描述

4.图中可以看到调试工具栏处的提供的5个按钮。此处单击Go按钮继续执行程序,直到执行到所设置的第一个断点处,程序才被暂停执行,在此期间,Debug Control窗口的数据将发生变化,如下图:

在这里插入图片描述

5.继续点击Go按钮,将执行到下一个断点,查看变量的变化,直到全部断点全部执行完毕。调试工具栏的按钮状态将变为不可用,如图:

在这里插入图片描述

6.程序调试完成后,可以关闭Debug Control对话框,此时Python Shell中将显示[DEBUG OFF]表示已经结束调试。

调试工具栏的5个按钮介绍:

按钮名称功能
Go执行跳至断点操作
Step进入要执行的函数
Over用于单步执行
Out跳出所在的函数
Quit结束调试

在调试过程中,如果所设置的断点处有其他函数调用,还可以单击Step 按钮进入函数内部.当确定该函数没有问题时,可以单击 Out按钮跳出该函数;或者在调试的过程中,当需要对已经发现的问题的原因进行修改时,可以直接单击 Quit 按钮结束调试。另外,如果调试的目的不是很明确(即不确认问题的位置),也可以直接单击 Step 按钮进行单步执行,这样可以清晰地观察程序的执行过程和数据的变量,方便找出问题。

使用 assert 语句调试程序

还可以在代码中通过print()函数把可能出现的变量输出,便于查看,但是会产生很多冗余信息,所以比较麻烦。因此,Python还提供了一种方法,即使用assert语句进行调试。它一般被用于对程序某个时刻必须满足的条件进行验证。其语法格式如下:

assert expression[,reason]
  • expression:条件表达式。如果表达式为真,则什么都不做,否则,将抛出AssertionError异常。
  • reason:可选参数,用于对判断条件进行描述,为了以后更好的直到哪儿出现了问题。

文章地址: 暑假Python基础整理 – 异常处理及程序调试


文章转载自:
http://bookie.zzyjnl.cn
http://arthralgic.zzyjnl.cn
http://byo.zzyjnl.cn
http://chon.zzyjnl.cn
http://agreed.zzyjnl.cn
http://blastula.zzyjnl.cn
http://cecal.zzyjnl.cn
http://adenoids.zzyjnl.cn
http://blackhearted.zzyjnl.cn
http://allodially.zzyjnl.cn
http://admissive.zzyjnl.cn
http://chondritic.zzyjnl.cn
http://cataplasm.zzyjnl.cn
http://carbamate.zzyjnl.cn
http://brilliant.zzyjnl.cn
http://bolshy.zzyjnl.cn
http://antiadministration.zzyjnl.cn
http://bucketsort.zzyjnl.cn
http://ambages.zzyjnl.cn
http://aeroallergen.zzyjnl.cn
http://bureaucratise.zzyjnl.cn
http://abcd.zzyjnl.cn
http://beclomethasone.zzyjnl.cn
http://accessit.zzyjnl.cn
http://appear.zzyjnl.cn
http://caragana.zzyjnl.cn
http://borsalino.zzyjnl.cn
http://annunciate.zzyjnl.cn
http://arrears.zzyjnl.cn
http://apotropaic.zzyjnl.cn
http://www.dtcms.com/a/281743.html

相关文章:

  • Redis 中的持久化机制:RDB 与 AOF
  • Java之Stream其二
  • 第二章 OB 存储引擎高级技术
  • 数学金融与金融工程:学科差异与选择指南
  • 【AI News | 20250714】每日AI进展
  • 为 Git branch 命令添加描述功能
  • 将 Vue 3 + Vite + TS 项目打包为 .exe 文件
  • 711SJBH构建制造业信息化人才培训体系的对策-开题报告
  • 21-C#的委托简单使用-1
  • Datawhale 25年7月组队学习coze-ai-assistant Task1学习笔记:动手实践第一个AI Agent—英伦生活口语陪练精灵
  • yolov5、yolov8、yolov11、yolov12如何训练及轻量化部署-netron-onnx
  • echarts折线图的 线条的样式怎么控制
  • Python os模块完全指南:从入门到实战
  • python编程实现GUI界面的排序与查找算法动态模拟演示程序
  • Sa-Token使用要点
  • mongoDB安装初始化及简单介绍
  • 2025/7/15——java学习总结
  • Pandas 和 NumPy 使用文档整理
  • 大宗现货电子盘交易系统核心功能代码解析
  • QT6 源,六章事件系统(8)QEvent 的孙子类:QEnterEvent 光标进入
  • 无穿戴动捕如何凭借摄像头视觉识别算法,赋能高校专业教学革新?
  • python进阶
  • 145-变分模态分解VMD与平稳小波变换SWT信号降噪算法实现!
  • 4G模块 A7680通过MQTT协议连接到onenet(新版)
  • WebAPIs基本认知,DOM基础介绍
  • 基于Springboot+UniApp+Ai实现模拟面试小工具五:权限校验参数校验及日志功能实现
  • Ubuntu 22.04 安装 mysql-server与 postgreSQL 服务端
  • el-tooltip 快速滚动的时候出现残影如何解决 vue3
  • 30.安卓逆向2-frida hook技术-hook So文件(获取app加载的所有模块、导入函数、导出函数、hook SO函数)
  • 区块链发展史全景长图