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

程序调试

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在程序开发过程中,免不了会出现一些错误,有语法方面的,也有逻辑方面的。对于语法方面的比较好检测,因为程序会直接停止,并且给出错误提示。而对于逻辑错误就不太容易发现了,因为程序可能会一直执行下去,但结果是错误的。所以作为一名程序员,掌握一定的程序调试方法,可以说是一项必备技能。

1  使用自带的IDLE进行程序调试

多数的集成开发工具都提供了程序调试功能。例如,我们一直在使用的IDLE,也提供了程序调试功能。使用IDLE进行程序调试的基本步骤如下:

(1)打开IDLE(Python Shell),在主菜单上选择“Debug”→“Debugger”菜单项,将打开Debug Control对话框(此时该对话框是空白的),同时Python Shell窗口中将显示“[DEBUG ON]”(表示已经处于调试状态),如图11所示。

图11  处于调试状态的Python Shell

(2)在Python Shell窗口中,选择“File”→“Open”菜单项,打开要调试的文件。这里打开实例01中编写的division_apple.py文件,然后添加需要的断点。

说明:断点的作用:设置断点后,程序执行到断点时就会暂时中断执行,程序可以随时继续。

添加断点的方法是:在想要添加断点的行上,单击鼠标右键,在弹出的快捷菜单中选择“Set Breakpoint”菜单项。添加断点的行将以黄色底纹标记,如图12所示。

图12  添加断点

说明:如果想要删除已经添加的断点,可以选中已经添加断点的行,然后单击鼠标右键,在弹出的快捷菜单中选择“Clear Breakpoint”菜单项。

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

图13  显示程序的执行信息

(4)在图13所示的调试工具栏中,提供了5个工具按钮。这里单击Go按钮继续执行程序,直到所设置的第一个断点。由于在division_apple.py文件中,第一个断点之前需要获取用户的输入,所以需要先在Python Shell窗口中输入苹果和小朋友的数量。输入后Debug Control窗口中的数据将发生变化,如图14所示。

图14  显示执行到第一个断点时的变量信息

说明:在调试工具栏中的5个按钮的作用为:Go按钮用于执行跳至断点操作;Step按钮用于进入要执行的函数;Over按钮表示单步执行;Out按钮表示跳出所在的函数;Quit按钮表示结束调试。

(5)继续单击Go按钮,将执行到下一个断点,查看变量的变化,直到全部断点都执行完毕。

程序调试完毕后,可以关闭Debug Control窗口,此时在Python Shell窗口中将显示“[DEBUG OFF]”(表示已经结束调试)。

2  使用assert语句调试程序

在程序开发过程中,免不了会出现一些错误,有语法方面的,也有逻辑方面的。对于语法方面的比较好检测,因为程序会直接停止,并且给出错误提示。而对于逻辑错误就不太容易发现了,因为程序可能会一直执行下去,但结果是错误的。所以作为一名程序员,掌握一定的程序调试方法,可以说是一项必备技能。Python提供了assert语句来调试程序。assert的中文意思是断言,它一般用于对程序某个时刻必须满足的条件进行验证。assert语句的基本语法如下:

assert expression [,reason]

参数说明:

l  expression:条件表达式,如果该表达式的值为真时,什么都不做,如果为假时,则抛出AssertionError异常。

l  reason:可选参数,用于对判断条件进行描述,为了以后更好地知道哪里出现了问题。

例如,修改实例01,应用断言判断程序是否会出现苹果不够分的情况,如果不够分,则需要对这种情况进行处理。

图标 (35)

  实例04  模拟幼儿园分苹果(应用断言调试)

在IDLE中创建一个名称为division_apple_dug.py的文件,然后将实例01的代码全部复制到该文件中,并且在第5行代码“children = int(input("请输入来了几个小朋友:"))”的下方添加一个assert语句,验证苹果的数量是否小于小朋友的数量,修改后的代码如下:

def division():

    '''功能:分苹果'''

    print("\n===================== 分苹果了 =====================\n")

    apple = int(input("请输入苹果的个数:"))        # 输入苹果的数量

    children = int(input("请输入来了几个小朋友:"))

    assert apple > children ,"苹果不够分"           # 应用断言调试

    result = apple // children                 # 计算每人分几个苹果

    remain = apple - result * children         # 计算余下几个苹果

    if remain > 0:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,

              "个,剩下", remain, "个。")

    else:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")

if __name__ == '__main__':

    division()                                # 调用分苹果的函数

运行执行,输入苹果的数量为5,小朋友的数量为10时,将抛出如图15所示的AssertionError异常。

图15  苹果的个数小于小朋友的个数时抛出AssertionError异常

通常情况下,assert语句可以和异常处理语句结合使用。所以,可以将上面代码的最后一行代码修改为以下内容:

try:

    division()                                   # 调用分苹果的函数

except AssertionError as e:                       # 处理AssertionError异常

    print("\n输入有误:",e)

这样,再执行程序时就不会直接抛出异常,而是给出如图16所示的提示。

图16  处理抛出的AssertionError异常

assert语句只在调试阶段有效。我们可以通过在执行python命令时加入-O(大写)参数来关闭assert语句。例如,在命令行窗口中输入以下代码执行“F:\program\Python\Code”目录下的division_apple_bug.py文件,即关闭division_apple_bug.py文件中的assert语句。

F:

cd F:\program\Python\Code

python -O division_apple_bug.py

说明:division_apple_bug.py文件的内容就是实例04的内容,其中添加了assert语句。

执行上面的语句后,输入苹果的数量为5,小朋友的数量为10时,并没有给出“输入有误:苹果不够分”的提示,如图17所示。

图17  在非调试状态下执行程序,将忽略assert语句

http://www.lryc.cn/news/362797.html

相关文章:

  • 深度学习-07-反向传播的自动化
  • 四川景源畅信:抖音做直播有哪些人气品类?
  • 闲鱼无货源-高级班,最全·最新·最干,紧贴热点 深度学习(17节课)
  • 力扣 739. 每日温度
  • 工业网关有效解决企业在数据采集、传输和整合方面的痛点问题-天拓四方
  • 金融壹账通的“新机遇” 用科技赋能助力金融机构做大做强“五篇大文章
  • Day 42 LVS四层负载均衡
  • 【源码】源码物品销售系统多种支付接口出售源码轻松赚钱
  • 图像操作的基石Numpy
  • 如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据
  • [C#]使用C#部署yolov8-seg的实例分割的tensorrt模型
  • 写个删除obj文件夹、bin文件夹的小工具
  • 【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记
  • python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析
  • C#WPF数字大屏项目实战02--主窗体布局
  • 【STM32】STM32F103C6T6标准外设库
  • 【学习笔记】Windows GDI绘图(十一)Graphics详解(下)
  • win10环境下nodejs安装过程
  • 亚信安慧AntDB:卓越的拓展性和灵活性
  • 【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)
  • 每日一练 - BGP配置中的认证方法
  • 人机交互中的阴差阳错
  • 个人网站建设方案书
  • IIS7整合Tomcat9服务器,并搭建ASP+PHP+JSP完整运行环境
  • IT运维重难点剖析及应对策略
  • 【Python学习】面向对象(OOP)
  • 鸿蒙HarmonyOS实战—如何使用Video组件播放视频
  • 【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能
  • JS 中的DOM 操作
  • 短剧出海怎么做?