当前位置: 首页 > 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语句

相关文章:

程序调试

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序开发过程中,免不了会出现一些错误,有语法方面的,也有逻辑方面的。对于语法方面的比较好检测,因…...

深度学习-07-反向传播的自动化

深度学习-07-反向传播的自动化 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…...

四川景源畅信:抖音做直播有哪些人气品类?

随着互联网科技的飞速发展,抖音作为新兴的社交媒体平台,已经成为了人们日常生活中不可或缺的一部分。而在抖音平台上,直播功能更是吸引了大量的用户和观众。那么,在抖音上做直播有哪些人气品类呢?接下来,就让我们一起…...

闲鱼无货源-高级班,最全·最新·最干,紧贴热点 深度学习(17节课)

课程目录 1-1:闲鱼潜规则_1.mp4 2-2:闲鱼的基础操作-养号篇_1.mp4 3-3:闲鱼实战运营-选品篇(一)_1.mp4 4-4:闲鱼实战运营-选图视频篇_1.mp4 5-5:闲鱼实战运营-标题筒_1.mp4 6-6&#xff1…...

力扣 739. 每日温度

题目来源&#xff1a;https://leetcode.cn/problems/daily-temperatures/description/ C题解&#xff1a;使用单调栈。栈里存放元素的索引&#xff0c;只要拿到索引就可以找到元素。 class Solution { public:vector<int> dailyTemperatures(vector<int>& tem…...

工业网关有效解决企业在数据采集、传输和整合方面的痛点问题-天拓四方

一、企业背景概述 随着信息技术的飞速发展&#xff0c;工业互联网已成为推动制造业转型升级的关键力量。在众多工业企业中&#xff0c;某公司凭借其深厚的技术积淀和广阔的市场布局&#xff0c;成为行业内的佼佼者。然而&#xff0c;在数字化转型的道路上&#xff0c;该公司也…...

金融壹账通的“新机遇” 用科技赋能助力金融机构做大做强“五篇大文章

金融强国、做好金融“五篇大文章”、发展新质生产力&#xff0c;正成为引导国内金融行业高质量发展的重要方向。 今年以来&#xff0c;越来越多银行保险机构为了做好金融“五篇大文章”&#xff0c;一面通过自主研发新科技&#xff0c;满足业务数字化需求&#xff0c;一面则积…...

Day 42 LVS四层负载均衡

一&#xff1a;负载均衡简介 1.集群是什么 ​ 集群&#xff08;cluster&#xff09;技术是一种较新的技术&#xff0c;通过集群技术&#xff0c;可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益&#xff0c;其任务调度则是集群系统中的核心技术 …...

【源码】源码物品销售系统多种支付接口出售源码轻松赚钱

源码物品销售系统&#xff0c;多种支付接口&#xff0c;出售源码轻松赚钱。一款基于phpmysql开发的内容付费管理系统。系统支持多种收费方式&#xff0c;免签收款&#xff0c;三级分销&#xff0c;实名认证&#xff0c; 用户投稿/奖励&#xff0c;自动升级&#xff0c;佣金提现…...

图像操作的基石Numpy

OpenCV中用到的矩阵都要转换成Numpy数组 Numpy是一个经高度优化的Python数值库 创建矩阵 检索与赋值[y,x] 获取子数组[:,:] 一 创建数组array() anp.array([2,3,4]) cnp.array([1.0,2.0],[3.0,4.0]]) import numpy as npanp.array([1,2,3])bnp.array([[1,2,3],[4,5,6]])pr…...

如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据

const data [{ deviceId: 1, name: "B相电压", signalTypeId: 1, ts: "2024-05-13 12:10:06", unit: "kV", 1: 39.37936, value:39.37936, },{ deviceId: 1, name: "A相电压", signalTypeId: 2, ts: "2024-05-13 12:11:06"…...

[C#]使用C#部署yolov8-seg的实例分割的tensorrt模型

【测试通过环境】 win10 x64 vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super 版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;TensorRT-CShar…...

写个删除obj文件夹、bin文件夹的小工具

每次编译代码成功后都会生成obj/bin等文件夹。因此想清理这些文件夹&#xff0c;无奈工程数量较多&#xff0c;每个都要手动去删除比较累。就想到用代码写个小工具删除&#xff0c;当然也可以利用bat批处理删除。 using System; using System.Collections.Generic; using Syst…...

【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记

0.论文 论文地址链接:https://arxiv.org/pdf/2012.07541v1 通过流的方式跟踪是一个比较新颖的点,所以这里比较关注运动跟踪,是如果做到流的跟踪来预测目标的位置以及ID绑定的。 FlowMOT的框架结构如下所示,本中会主要关注下运动跟踪、数据关联、ID分配、新生/消亡…...

python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析

目录 python长方形周长面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python长方形周长面积 2024年3月 python编程等级考试级编程题 一、…...

C#WPF数字大屏项目实战02--主窗体布局

1、主窗体起始属性 设置有关属性如下&#xff1a; WindowStyle"None"-》无边框 AllowsTransparency"True" -》允许透明 WindowStartupLocation"CenterScreen"-》启动时位于屏幕中间 FontFamily"Microsoft YaHei"-》字体微软雅黑 …...

【STM32】STM32F103C6T6标准外设库

1、标准外设库获取 第一步&#xff0c;首先获取标准外设库&#xff0c;可以从官网进行下载。 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 根据自己的型号选择不同的系列&#xff0c;我这里选择是STM32F1系列 下载最新版本V3.6&a…...

【学习笔记】Windows GDI绘图(十一)Graphics详解(下)

文章目录 Graphics的方法Graphics.FromImageSetClip设置裁切区域IntersectClip更新为相交裁切区域TranslateClip平移裁切区域IsVisible判断点或矩形是否在裁切区域内MeasureCharacterRanges测量字符区域MeasureString测量文本大小MultiplyTransform矩阵变换 Graphics的方法 Gr…...

win10环境下nodejs安装过程

打开 https://nodejs.org/en/官网下载node.js 2.下载完成后的安装文件为node-v16.16.0-x64.msi&#xff0c;双击进行安装即可。 3.一直默认安装&#xff0c;记得可以更改安装路径 4.其他不用打勾&#xff0c;一直next&#xff0c;安装完成即可。 5.安装完成后&#xff0c;wi…...

亚信安慧AntDB:卓越的拓展性和灵活性

在当今这个信息爆炸的时代&#xff0c;企业对数据处理的需求不断增长&#xff0c;传统的数据库系统往往难以应对海量数据的存储和处理挑战。然而&#xff0c;随着亚信安慧AntDB的出现&#xff0c;解决这一难题的曙光终于出现在眼前。AntDB不仅仅具备了高吞吐、高并发、高性能的…...

【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 在中小企业中&#xff0c;设备管理是确保生产和运营效率的重要环节。传统的设备管理通常依赖于手工记录和人工管理&#xff0c;容易导致数据不准确、…...

每日一练 - BGP配置中的认证方法

01 真题题目 在 BGP 配置中使用认证,应该如何配置? A.一对 BGP 对等体之间必频使用相同的 MD5 PASSWORD B.同一个 AS 内的所有路由器都必须使用相同的 password C.一台路由器上的所有 BGP 对等体都必频使用相同的 password D.一对 BGP 对等体之间必须使用相同的明文 passwo…...

人机交互中的阴差阳错

人机交互是一门研究系统与用户之间的交互关系的学问。它旨在设计和实现使人们能够与计算机系统进行有效交互的方法和技术。人机交互领域研究的热门话题之一就是人工智能。另一个热门话题就是增强现实&#xff08;Augmented Reality&#xff09;和虚拟现实&#xff08;Virtual R…...

个人网站建设方案书

个人网站建设方案书 一、项目背景 随着互联网的迅猛发展&#xff0c;个人网站已经成为展示个人能力、情感表达的重要平台。无论是个人品牌推广&#xff0c;还是个人作品展示&#xff0c;个人网站都能够为个人提供一个独特的展示空间。因此&#xff0c;建设一个个人网站已经成为…...

IIS7整合Tomcat9服务器,并搭建ASP+PHP+JSP完整运行环境

本文以Windows Vista系统为例&#xff0c;详细讲解IIS7整合Tomcat服务器&#xff0c;同时支持ASPPHPJSP三种Web动态网页技术的方法。 Vista系统自带的IIS版本为7.0&#xff0c;能安装的IE浏览器的最高版本为IE9。IE9也是Vue2前端框架支持的最低浏览器版本。 【准备工作】 去微…...

IT运维重难点剖析及应对策略

运维工作作为信息技术领域的重要组成部分&#xff0c;对于保障企业信息系统的稳定运行具有至关重要的作用。然而&#xff0c;在实际工作中&#xff0c;运维人员常常面临各种重难点问题&#xff0c;这些问题不仅影响运维效率&#xff0c;还可能对企业的正常运营造成不利影响。本…...

【Python学习】面向对象(OOP)

让我们从Python面向对象编程&#xff08;OOP&#xff09;的基础概念开始&#xff0c;逐步深入到继承、多态、特殊方法和运算符重载。 一、类和对象 什么是类和对象&#xff1f; - 类&#xff08;Class&#xff09;&#xff1a;类是创建对象的蓝图或模板。它定义了一组属性和方法…...

鸿蒙HarmonyOS实战—如何使用Video组件播放视频

1.视频播放 鸿蒙系统中&#xff0c;关于视频播放&#xff0c;可以使用上层视频组件Video。 参数如下 src 支持file:///data/storage路径前缀的字符串&#xff0c;用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。 说明&#xff1a;视频支持的格式是&am…...

【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能

1 简介 最近在浏览 Paddle2ONNX 的 Issues 时&#xff0c;我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本&#xff0c;于是我动手添加了这个功能。 能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX 2 什么…...

JS 中的DOM 操作

目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D...

网站建设客户需要提供什么科目/网站源码平台

sql转mysql数据库&#xff0c;用到EF&#xff0c;遇到vs2012新建实体数据模型时无Mysql数据源的问题。 问题截图如下&#xff1a; 解决方法1&#xff1a;&#xff08;简单的的解决方法&#xff0c;有可能解决问题&#xff0c;如不能解决问题&#xff0c;请看解决方法2&#xff…...

设计网站界面/疫情防控最新通告

//匹配出控制器&#xff08;微猎手&#xff09;$url http://pig.aiketu.com/index.php?gUser&mIndex&aindex;preg_match(/m[0-9a-zA-Z]{0,}/, $url,$action);转载于:https://blog.51cto.com/jhomephper/1617304...

国内最新疫情/seo策略

MySQL - 语句执行顺序 1.顺序 FROMONJOINWHEREGROUP BY (开始使用SELECT中的别名&#xff0c;后面的语句中都可以使用)ROLLUP, CUBE, AVG, SUM ...HAVINGSELECTDISTINCTORDER BYTOP, LIMIT2.解析 FORM&#xff1a;对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1ON&#…...

wordpress删除顶部/宁波seo排名优化价格

python中os模块中文帮助文档文章分类:Python编程python中os模块中文帮助文档翻译者&#xff1a;butalnd 翻译于2010.1.7——2010.1.8&#xff0c;个人博客&#xff1a;http://butlandblog.appspot.com/注此模块中关于unix中的函数大部分都被略过&#xff0c;翻译主要针对WINDOW…...

网站关键词分隔符/制作网站的最大公司

STM32 HAL库学习笔记1-HAL库简介HAL库SPL 库 和 HAL 库两者相互独立&#xff0c;互不兼容。几种库的比较如下目前几种库对不同芯片的支持情况如下ST 中文官网上有一篇《关于ST库函数的代码性能对比》的文章&#xff0c;其中对比了各种库的性能如下LL 库1 STM32的三种开发方式一…...

软件外包怎么样/厦门seo排名优化

相信大家对Chinglish早已经见怪不怪了&#xff0c;就连上世纪30年代逐字翻译的中式英语Long time no see(很久不见)&#xff0c;也大张旗鼓地进入了英语标准词组的“领地”。像类似的一些“中式逐字翻译原创版”&#xff0c;也正在逐渐被老外们所接受&#xff1b;但有些情况则不…...