Python错误分析与调试


 在Python编程的过程中,我们难免会遇到各种各样的错误,而有效地分析和调试这些错误,能让我们的代码快速恢复正常运行,今天就来和大家聊聊Python中错误分析与调试的相关内容。
 


错误分析
 


Python中的错误大致可以分为语法错误和逻辑错误两类。
 
语法错误通常是代码违反了Python的语法规则导致的,比如少写了括号、冒号,或者关键字拼写错误等。当出现语法错误时,Python解释器在解析代码阶段就会报错,并且会明确指出在哪一行出现了问题,帮助我们快速定位。例如下面这段代码:
 

if Trueprint("Hello")


这里就少了冒号,运行时会提示语法错误,并且准确告知是在 if True 这一行不符合语法规范。
 

def calculate(num1, num2, operator):if operator == '+':return num1 + num2elif operator == '-':return num1 - num2elif operator == '*':return num1 * num2elif operator == '/':return num1 / num2else:return None# 主程序
while True:try:# 获取用户输入的数值和运算符num1 = float(input("请输入第一个数:"))operator = input("请输入运算符号(+、-、*、/):")num2 = float(input("请输入第二个数:"))# 调用calculate函数执行运算,并输出结果result = calculate(num1, num2, operator)if result is not None:print("计算结果为:", result)else:print("输入的运算符号不正确,请重新输入!")# 询问用户是否继续运算flag = input("是否继续运算?(Y/N)")if flag == 'N' or flag == 'n':breakexcept ZeroDivisionError:print("错误:除数不能为零")except ValueError:print("错误:请输入有效的数字")except Exception as e:print("发生异常:",e)finally:print("程序结束。")


逻辑错误则相对更“隐蔽”,代码在语法上是正确的,可以正常运行,但得到的结果却不是我们预期的那样。比如循环条件设置错误、变量使用不当等情况。例如计算1到100的累加和,代码写成:
 

sum_num = 0
for i in range(1, 10):sum_num += i
print(sum_num)


这段代码语法无误,可它只计算了1到9的累加和,和我们预期的1到100累加和不同,这就是逻辑错误,需要仔细分析代码逻辑来排查。


Print调试
 


Print调试是一种很常用且简单直接的调试方法。其核心思路就是在代码的关键位置插入 print 语句,输出一些关键变量的值或者程序执行到此处的提示信息,从而了解程序的执行流程和变量的变化情况。
 
比如在一个函数内部,想要知道传入的参数值以及函数执行过程中某个中间变量的值,就可以这样做:
 

def add_numbers(a, b):print("传入的参数a:", a)print("传入的参数b:", b)result = a + bprint("相加后的结果:", result)return resultadd_numbers(3, 5)


 
 
通过查看输出的这些打印信息,我们就能判断参数传递是否正确,中间计算过程有没有问题等。不过当代码规模较大时,过多的 print 语句可能会让输出变得杂乱,不太方便查看重点内容。
 


Debug调试


 
Python提供了强大的调试工具,方便我们更高效地调试代码。常用的调试方式有使用内置的 pdb 模块。
 
首先,在代码中想要开始调试的地方插入 import pdb; pdb.set_trace() 语句,代码运行到此处时就会暂停,进入调试模式。比如:
 

def divide_numbers(a, b):import pdb; pdb.set_trace()result = a / breturn resultdivide_numbers(10, 2)


 
 
进入调试模式后,会出现 (Pdb) 提示符,此时可以输入各种调试命令,像 n (next)表示执行下一行代码, s (step)表示进入函数内部单步执行, c (continue)表示继续执行直到遇到下一个断点等,通过这些命令可以清晰地跟踪代码的执行过程,查看变量的值等情况。
 


程序断点


 
在一些集成开发环境(IDE)中,如PyCharm等,设置程序断点是非常便捷的调试手段。我们只需在代码的某一行点击一下,就可以设置一个断点,然后运行程序时,程序会自动在断点处暂停。
 
例如在PyCharm中,打开要调试的Python文件,在想要关注的代码行左边栏点击一下,出现红点就代表设置好了断点。运行调试模式后,程序停在断点处,我们可以通过调试窗口查看当前的变量值、调用栈等信息,方便分析代码的执行状态,而且可以灵活地控制程序继续执行、单步执行等操作,就像在 pdb 调试中通过命令控制一样,只是操作更加直观。
 


调试控制
 


无论是使用 print 调试、 pdb 调试还是IDE中的断点调试,都涉及到调试控制。
 
在调试过程中,我们可以决定是单步执行代码,细致地查看每一行的执行效果;也可以选择继续执行到下一个断点处,跳过一些已经确认没问题的代码段;还能查看当前作用域内所有变量的值,分析变量是否符合预期等。合理运用这些调试控制手段,能帮助我们迅速定位到错误所在,从而高效地修复代码中的问题。

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

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

相关文章

Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战

Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战 一、概述 Browser-use 是一个旨在将 AI “智能体”(Agents)与真实浏览器进行交互的 Python 库,可以轻松实现浏览器自动化。在配合 LLM(如 GPT 系列&a…

网络空间安全(51)邮件函数漏洞

前言 邮件函数漏洞,特别是在PHP环境中使用mail()函数时,是一个重要的安全问题。 一、概述 在PHP中,mail()函数是一个用于发送电子邮件的内置函数。其函数原型为: bool mail ( string $to , string $subject , string $message [, …

LLaMA-Factory 数据集成从入门到精通

一、框架概述 LLaMA-Factory 框架通过Alpaca/Sharegpt双格式体系实现多任务适配,其中Alpaca专注结构化指令微调(含SFT/DPO/预训练),Sharegpt支持多角色对话及多模态数据集成。核心配置依托 dataset_info.json 实现数据源映射、格…

如何根据设计稿进行移动端适配:全面详解

如何根据设计稿进行移动端适配:全面详解 文章目录 如何根据设计稿进行移动端适配:全面详解1. **理解设计稿**1.1 设计稿的尺寸1.2 设计稿的单位 2. **移动端适配的核心技术**2.1 使用 viewport 元标签2.1.1 代码示例2.1.2 参数说明 2.2 使用相对单位2.2.…

07-Spring Boot 自动配置原理全解析

Spring Boot 自动配置原理全解析(EnableAutoConfiguration 源码追踪) Spring Boot 之所以能大幅简化配置,核心就在于它的 自动配置机制,而这一机制背后主要依赖于 EnableAutoConfiguration 注解。本文将从使用、源码、常见问题及…

前端如何检测项目中新版本的发布?

前言 你是否也曾遇到过这种情况,每次发完版之后都还会有用户反馈问题没有被修复,一顿排查之后发现他用的还是旧的版本。 用户:在 XX 页面 XX 字段还是不展示 我:刷新下页面 用户:刷新了啊 我:强刷一下&…

Vue 项目使用 pdf.js 及 Elasticpdf 教程

摘要:本文章介绍如何在 Vue 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署,包括数据的云端同步,示例代码完善且简单,文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticPDF基…

聊聊Spring AI的ChromaVectorStore

序 本文主要研究一下Spring AI的ChromaVectorStore 示例 pom.xml <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-vector-store-chroma</artifactId></dependency>配置 spring:ai:vectorstore:…

整数编码 - 华为OD统一考试(A卷、Java)

题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字节。采用小端序编…

Linux 递归查找并删除目录下的文件

在 Linux 中&#xff0c;可以使用 find 命令递归查找并删除目录下的文件 1、示例命令 find /path/to/directory -type f -name "filename_pattern" -exec rm -f {} 2、参数说明 /path/to/directory&#xff1a;要查找的目标目录type f&#xff1a;表示查找文件&am…

【笔记】VS中C#类库项目引用另一个类库项目的方法

VS中C#类库项目引用另一个类库项目的方法 在 C# 开发中&#xff0c;有时我们需要在一个类库项目中引用另一个类库项目&#xff0c;但另一个项目可能尚未编译成 DLL。在这种情况下&#xff0c;我们仍然可以通过 Visual Studio 提供的项目引用功能进行依赖管理。 &#x1f3af; …

第五讲(下)| string类的模拟实现

string类的模拟实现 一、Member constants&#xff08;成员常数&#xff09;npos 二、Member functions&#xff08;成员函数&#xff09;constructor&#xff08;构造&#xff09;、destructor&#xff08;析构&#xff09;、c_str遍历1 &#xff1a;Iterators遍历2&#xff1…

洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构

题目描述 在征服南极之后&#xff0c;Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。 他将在 2018 年 12 月 31 日开始出发&#xff0c;在这之前需要一共筹集 n 元钱。 他打算在每个星期一筹集 x 元&#xff0c;星期二筹集 xk 元&#xff0c;……

【正点原子】如何设置 ATK-DLMP135 开发板 eth0 的开机默认 IP 地址

开机就想让 eth0 乖乖用静态 IP&#xff1f;别再被 DHCP 抢走地址了&#xff01; 三步教你彻底掌控 ATK-DLMP135 的网络启动配置&#xff0c;简单粗暴&#xff0c;实测有效&#xff01; 正点原子STM32MP135开发板Linux核心板嵌入式ARM双千兆以太网CAN 1. 删除 dhcpcd 自动获取…

以UE5第三方插件库为基础,编写自己的第三方库插件,并且能够在运行时复制.dll

首先&#xff0c;创建一个空白的C 项目&#xff0c;创建第三方插件库。如下图所示 编译自己的.Dll 和.lib 库&#xff0c;打开.sln 如下图 ExampleLibrary.h 的代码如下 #if defined _WIN32 || defined _WIN64 #define EXAMPLELIBRARY_IMPORT __declspec(dllimport) #elif d…

正则表达式示例集合

目录&#xff1a; 1、精准匹配2、字符匹配3、参考示例3.1、一个合理的用户名正则表达式3.2、匹配 HTML 标签及内容3.3、其他示例3.4、微信号正则表达式3.5、QQ号正则表达式3.6、车牌号号正则表达式3.7、邮箱正则表达式 1、精准匹配 单字符模式&#xff0c;如 a&#xff0c;不论…

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡 在 2025 年这个科技浪潮奔涌的时代&#xff0c;软件开发领域持续变革&#xff0c;前端与后端开发方向的抉择&#xff0c;成为众多从业者和爱好者亟待破解的关键命题。卓伊凡就频繁收到这样的疑问&#xff1a;“2025 年了&…

巧用数论与动态规划破解包子凑数问题

本文针对“包子凑数”问题&#xff0c;深入解析如何通过最大公约数&#xff08;GCD&#xff09;判断无法组成的数目是否无限&#xff0c;并结合动态规划高效求解有限情况下的具体数目。通过清晰的算法思路、代码实现及示例详解&#xff0c;揭秘数论与动态规划在组合问题中的巧妙…

什么是数据

一、数据的本质定义​​ ​​哲学视角​​ 亚里士多德《形而上学》中"未加工的观察记录"现代认知科学&#xff1a;人类感知系统接收的原始刺激信号&#xff08;如视网膜光信号、听觉神经电信号&#xff09;信息论奠基人香农&#xff1a;消除不确定性的度量载体 ​​…

FreeRTOS中互斥量实现数据共享优化

在 FreeRTOS 中&#xff0c;当读操作远多于写操作时&#xff0c;使用**互斥量&#xff08;Mutex&#xff09;会导致读任务频繁阻塞&#xff0c;降低系统性能。此时&#xff0c;可以通过实现读者-写者锁&#xff08;Reader-Writer Lock&#xff09;**优化&#xff0c;允许多个读…