Python 中的错误处理与调试技巧
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。
🔍 博客内容包括:
- Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
- 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
- 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
- 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
- Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
- 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。
🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。
📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀
📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。
目录
1. 引言
2. Python 中的错误处理机制
2.1 语法错误(SyntaxError)
2.2 异常(Exception)
2.3 异常的捕获与处理
3. 常见的错误与异常
4. Python 中的调试技巧
4.1 使用 print() 语句
4.2 使用 logging 模块
4.3 使用 Python 的内置调试器 pdb
4.4 使用 IDE 调试工具
5. 调试技巧总结
6. 结论
1. 引言
在软件开发过程中,错误是不可避免的。无论是在开发初期还是在项目后期,程序都可能会遇到各种各样的错误。Python 作为一种简洁且强大的编程语言,提供了丰富的错误处理机制和调试工具,帮助开发者发现和解决问题。本文将深入探讨 Python 中的错误处理机制、常见错误类型及其处理方法,并介绍一些实用的调试技巧,以提高开发效率和代码质量。
2. Python 中的错误处理机制
在 Python 中,错误(Exception)主要分为两类:语法错误(SyntaxError) 和 异常(Exception)。
2.1 语法错误(SyntaxError)
语法错误是在程序编写时发生的,通常是由于代码不符合 Python 的语法规则。例如,缺少冒号、括号不匹配等。语法错误会在代码执行之前就被 Python 解释器发现,并抛出相应的错误信息。
# 示例:缺少冒号导致语法错误
if x > 5print("x is greater than 5")
2.2 异常(Exception)
异常是在程序运行过程中发生的错误,它通常由程序逻辑错误、资源不可用等原因引起。Python 提供了异常处理机制,使得开发者能够在出现异常时采取合适的应对措施。常见的异常类型包括:
ValueError
: 无效的值TypeError
: 错误的类型IndexError
: 索引超出范围KeyError
: 字典中不存在指定的键FileNotFoundError
: 文件未找到
Python 使用 try...except
语句进行异常处理,开发者可以在 except
块中捕获并处理异常,避免程序崩溃。
try:x = int(input("请输入一个数字: "))
except ValueError:print("输入无效,请输入一个有效的数字。")
2.3 异常的捕获与处理
在 Python 中,使用 try...except
块来捕获和处理异常。如果代码块中抛出了异常,Python 会跳转到相应的 except
块,进行处理。
try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:# 异常处理print("不能除以零!")
可以使用 else
和 finally
语句块来完善错误处理机制:
else
: 如果try
块没有抛出异常,执行else
块。finally
: 无论是否发生异常,finally
块的代码都会被执行,通常用于资源释放等操作。
try:x = int(input("请输入一个数字: "))result = 10 / x
except ValueError:print("输入无效!")
except ZeroDivisionError:print("不能除以零!")
else:print(f"计算结果是: {result}")
finally:print("程序结束!")
3. 常见的错误与异常
了解常见的 Python 错误类型有助于更好地进行错误处理和调试。以下是一些常见的错误和异常类型:
NameError:引用了一个未定义的变量。
print(undeclared_variable)
TypeError:数据类型不匹配,例如在一个整数上调用字符串方法。
number = 10
number.upper() # 错误:整数没有 upper 方法
IndexError:访问列表时使用了无效的索引。
lst = [1, 2, 3]
print(lst[5]) # 错误:索引超出范围
FileNotFoundError:打开文件时,文件不存在。
with open('nonexistent_file.txt', 'r') as f:content = f.read()
4. Python 中的调试技巧
调试是软件开发中不可缺少的环节,Python 提供了一些强大的调试工具和技巧,帮助开发者定位和修复问题。
4.1 使用 print()
语句
最常见的调试方法是通过插入 print()
语句,在关键位置输出变量的值,以帮助开发者检查程序状态。这种方法简单直接,适合快速调试。
x = 10
y = 0
print(f"x = {x}, y = {y}")
result = x / y # 调试时检查变量的值
4.2 使用 logging
模块
相比 print()
,logging
模块提供了更强大的日志记录功能。开发者可以设置不同的日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL),并将日志输出到文件或控制台中。logging
适用于生产环境中,能够提供更详细的信息,有助于问题排查。
import logging# 设置日志记录器
logging.basicConfig(level=logging.DEBUG)
logging.debug("调试信息")
logging.info("程序运行正常")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("严重错误")
4.3 使用 Python 的内置调试器 pdb
Python 提供了内置的调试器 pdb
,可以在程序运行时暂停执行,并允许开发者检查程序的状态、单步执行代码、查看变量值等。使用 pdb.set_trace()
可以在指定位置启动调试器。
import pdbdef divide(x, y):pdb.set_trace() # 调试点return x / yresult = divide(10, 2)
启动调试器后,程序会暂停,并允许开发者输入命令,如查看变量、执行单步操作等。
常用的 pdb
调试命令包括:
n
: 执行下一行代码s
: 进入函数内部c
: 继续执行程序,直到下一个断点q
: 退出调试器
4.4 使用 IDE 调试工具
现代集成开发环境(IDE)如 PyCharm 和 Visual Studio Code 提供了图形化的调试工具,允许开发者通过断点、变量监视、调用栈等功能进行调试。使用 IDE 的调试器,可以更加直观地跟踪代码执行过程。
5. 调试技巧总结
- 理解错误信息:仔细阅读 Python 抛出的错误信息,了解错误发生的原因和位置。
- 局部化问题:通过逐步注释代码块、简化问题的方式,将问题范围缩小到最小的可重现部分。
- 使用单元测试:通过编写单元测试,确保代码的正确性,并尽早发现潜在的问题。
- 借助调试工具:使用
pdb
或 IDE 提供的调试工具,可以更高效地定位和修复问题。
6. 结论
Python 提供了强大的错误处理机制和调试工具,帮助开发者更高效地排查和解决问题。通过掌握 try...except
异常处理、logging
日志记录、pdb
调试器等技巧,可以大大提高代码的健壮性和开发效率。在实际开发中,错误处理和调试是不断学习和提升的过程,掌握这些技巧是每个 Python 开发者的重要技能。
相关文章:

Python 中的错误处理与调试技巧
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

门禁系统与消防报警的几种联动方式
1、规范中要求的出入口系统与消防联动 1.1《建筑设计防火规范》GB 50016-2018 1.2《民用建筑电气设计规范》JGJ 16-2008 14.4出入口控制系统 3 设置在平安疏散口的出入口限制装置,应与火灾自动报警系统联动;在紧急状况下应自动释放出入口限制系统&…...

云原生安全风险分析
一、什么是云原生安全 云原生安全包含两层含义: 面向云原生环境的安全具有云原生特征的安全 0x1:面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中基础设施、编排系统和微服务等系统的安全。 这类安全机制不一定具备云原生的特性…...
解决cursor50次使用限制问题并恢复账号次数
视频内容: 在这个视频教程中,我们将演示如何解决科sir软件50次使用限制的问题,具体步骤包括删除和注销账号、重新登录并刷新次数。教程详细展示了如何使用官网操作将账号的剩余次数恢复到250次,并进行软件功能测试。通过简单的操…...

python学习笔记—16—数据容器之元组
1. 元组——tuple(元组是一个只读的list) (1) 元组的定义注意:定义单个元素的元组,在元素后面要加上 , (2) 元组也支持嵌套 (3) 下标索引取出元素 (4) 元组的相关操作 1. index——查看元组中某个元素在元组中的位置从左到右第一次出现的位置 t1 (&qu…...

rabbitmq——岁月云实战笔记
1 rabbitmq设计 生产者并不是直接将消息投递到queue,而是发送给exchange,由exchange根据type的规则来选定投递的queue,这样消息设计在生产者和消费者就实现解耦。 rabbitmq会给没有type预定义一些exchage,而实际我们却应该使用自己定义的。 1.1 用户注册设计 用户在…...

Matlab APP Designer
我想给聚类的代码加一个图形化界面,需要输入一些数据和一些参数并输出聚类后的图像和一些评价指标的值。 gpt说 可以用 app designer 界面元素设计 在 设计视图 中直接拖动即可 如图1,我拖进去一个 按钮 ,图2 红色部分 出现一行 Button 图…...
CSS语言的编程范式
CSS语言的编程范式 引言 在现代网页开发中,CSS(层叠样式表)作为一种样式语言,承担着网站前端呈现的重要角色。无论是简单的静态网页还是复杂的单页应用,CSS都在人机交互中发挥着至关重要的作用。掩盖在美观背后的&am…...
一个简单的php博客
一个简单的 PHP 博客的示例代码: 收起 php <?php // 连接数据库 $servername "localhost"; $username "root"; $password ""; $dbname "blog_db";// 创建连接 $conn new mysqli($servername, $username, $passw…...

解决anaconda prompt找不到的情况
由于打开某个文件夹导致系统卡死了,鼠标使用不了,只能使用快捷键ctrlaltdelete打开,点任务管理器也没什么用,就点了注销选项。 注销:清空缓存空间和注册表信息,向系统发出清除现在登陆的用户的请求。 导致…...

【深度学习】多目标融合算法(二):底部共享多任务模型(Shared-Bottom Multi-task Model)
目录 一、引言 1.1 往期回顾 1.2 本期概要 二、Shared-Bottom Multi-task Model(SBMM) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 三、总结 一、引言 在朴素的深度学习ctr预估模型中(如DNN),通常以一个行…...

如何使用vue引入three.js
在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求,Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例,展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…...

城市生命线安全综合监管平台
【落地产品,有需要可留言联系,支持项目合作或源码合作】 一、建设背景 以关于城市安全的重要论述为建设纲要,聚焦城市安全重点领域,围绕燃气爆炸、城市内涝、地下管线交互风险、第三方施工破坏、供水爆管、桥梁坍塌、道路塌陷七…...
计算机毕设【开题报告】怎么写?
技巧 1. 标题简洁且具体 技巧:开题报告的标题要简明扼要,并准确表达研究的核心内容。避免使用复杂的术语或过于宽泛的题目。 实用方法:根据你的研究方向,标题应该包括你的系统类型、技术框架或研究对象。例如,“基于…...

Go学习:多重赋值与匿名变量
1. 变量的多重赋值 1.1 基本语法格式 go语言中,可以将多个赋值语句 合并成 一句,比如: a : 10 b : 20 c : 30//a,b,c三个变量的赋值语句可以简练成以下格式a, b, c : 10, 20, 30 1.2 交换变量值 当需要交换两个变量的值时&#…...

【Ubuntu 上搭建 Nginx-RTMP 服务】
本章目录: 环境1. 安装依赖2. 创建 Nginx 编译目录3. 下载 Nginx 和 Nginx-RTMP-Module4. 编译 Nginx 并添加 RTMP 模块5. 验证 Nginx 安装成功6. 配置环境变量7. 修改 Nginx 配置文件8. 启动 Nginx 服务查看 Nginx 是否启动成功查看端口监听状态 8. 常见问题及解决方法1. 缺少…...

使用uniapp 微信小程序一些好用的插件分享
总结一下自己在开发中遇见的一问题,通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索,多选功能,多选搜索功能,自定义 下拉框插件,使用这个的原因是因为 uniui uview 组件库下拉框太…...

linux centos挂载未分配的磁盘空间
使用到的命令 lshw -class disk -short hostnamectl fdisk /dev/sdb partprobe /dev/sdb mount /dev/sdb2 /opt/fastdfs/ mkfs.ext4 /dev/sdb2 mount -t ext4 /dev/sdb2 /opt/fastdfs/...
C语言凯撒密码程序分享
把刚才编写的程序又加工了一下,变成了程序,发给大家 我用夸克网盘分享了「凯撒密码」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://p…...

2025新年源码免费送
2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝,又进来偷我源码啦👊👊👊。欢迎偷源码 🔥🔥🔥 获取免费源码以及更多源码,可以私信联系我 我们常常…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...