[oeasy]python0007-调试程序_debug

简介: [oeasy]python0007-调试程序_debug

 

调试程序 🥊

回忆上次内容

    • py 的程序是按照顺序执行的
      • 是一行行挨排解释执行的
      • 程序并不是数量越多越好
      • kpi也在不断演化

      image.gif编辑

        • 写的代码越多
          • 出现的bug就越多
          • 什么是bug
          • 如何找bug呢?

          尝试调试

            • 那 python 程序到底是怎么一步步解释执行的呢?🤔

            print("1982------Guido in cwi")

            print("1995------Guido in cnri")

            print("2000------Guido in beopen")

            print("2005------Guido in google")

            print("2012------Guido in dropbox")

            print("2020------Guido in microsoft")

              image.gif编辑

              尝试调试

                • 粘贴到vim中

                image.gif编辑

                  • 原来是一把执行
                  • 现在可以一步一步调试运行

                  pdb3 guido.py

                    • 使用pdb来进行调试
                      • pdb的意思是python'sdebugger🤖
                        • 为什么要逐步运行呢?

                        逐步运行

                          • 由于程序不知道哪里出的问题
                            • 所以一步步来执行

                            image.gif编辑

                              • 一步步调试运行的目的是去除bug
                                • 也就是debug
                                  • 可是为什么把程序错误叫做bug 🪰 呢?

                                  help

                                    • 不知道怎么办的时候
                                      • 就要求助(help)

                                      image.gif编辑

                                        • 他给了我很多的命令
                                        • 还说可以help 一下具体 topic
                                        • 查看你哪个topic呢?

                                        具体帮助

                                          • 查看帮助的帮助

                                          image.gif编辑

                                            • 没有参数的话
                                              • 显示所有命令
                                                • 有一个参数
                                                  • 显示这个参数的帮助
                                                    • h(elp) 的缩写是 h
                                                      • elp可以省略

                                                      image.gif编辑

                                                        • 这并不难 h h
                                                        • 再看看其他单词

                                                        list

                                                          • l(ist)
                                                            • 可以列出上下文11行的程序
                                                            • 缩写是l

                                                            image.gif编辑

                                                              • 当前行前面有个箭头 ->

                                                              使用命令

                                                              image.gif编辑

                                                                • 确实可以看到上下文
                                                                • ->代表着当前运行到了哪里
                                                                • 怎么往下走呢?

                                                                next

                                                                  • n(ext)
                                                                    • 可以往前走一句
                                                                    • 缩写是n

                                                                    image.gif编辑

                                                                      • 试一下

                                                                      image.gif编辑

                                                                        • 把1982年输出了
                                                                        • 然后当前行来到了1995年
                                                                        • 如何判断1995年在整个程序中的位置呢?

                                                                        执行

                                                                          • l(ist)
                                                                            • 可以列出当前行的上下文

                                                                            image.gif编辑

                                                                              • 在第2行
                                                                                • next就会到第3行
                                                                                  • 当然也可以一路next下去

                                                                                  一路next

                                                                                  image.gif编辑

                                                                                    • 我们一路next

                                                                                    完成调试

                                                                                      • 一路next 下去
                                                                                      • python 解释器
                                                                                      • 就是这么一步步地解释执行的

                                                                                      image.gif编辑

                                                                                        • 确实是顺序执行的
                                                                                        • 一行行挨排儿执行的
                                                                                        • 我们就一步步地把bug找出来
                                                                                        • 就像找凶手一样!

                                                                                        最真实的解谜游戏

                                                                                          • debug是我见过最真实的解谜游戏了
                                                                                          • 比什么剧本杀好玩多了
                                                                                          • 一步步地分析
                                                                                          • 找不到罪魁祸首的时候

                                                                                          image.gif编辑

                                                                                            • 需要冷静地分析
                                                                                            • 找到罪魁祸首的时候
                                                                                            • 那种快乐太真实了!!!!
                                                                                            • 终于来到最后一行
                                                                                            • 如果到这里再next
                                                                                            • 会发生什么呢?

                                                                                            最后一步

                                                                                              • 执行完最后一句之后
                                                                                                • 就会返回(return)到python
                                                                                                • 然后返回(return)到shell

                                                                                                image.gif编辑

                                                                                                  • 如果这个时候已经到了程序的尽头
                                                                                                  • 再next会发生什么呢?

                                                                                                  绕圈

                                                                                                    • 到头了就又重来
                                                                                                      • 就会重新执行这个文件
                                                                                                      • 就圜道了

                                                                                                      image.gif编辑

                                                                                                        • 可是这个和虫子(bug)有什么关系呢?

                                                                                                        第一个错误 bug

                                                                                                        image.gif编辑

                                                                                                          • 历史上第一个程序错误是
                                                                                                            • 这只虫子bug🪰
                                                                                                            • 飞进继电器(relay)计算机(computer)里面来
                                                                                                            • 导致当时的继电器短路
                                                                                                              • 所以后来
                                                                                                                • 管错误叫做bug
                                                                                                                • 管调试程序错误叫做debug

                                                                                                                总结

                                                                                                                  • py 文件的程序是按照顺序
                                                                                                                    • 一行行挨排解释执行的
                                                                                                                    • 我们可以pdb3 hello.py 来对程序调试
                                                                                                                      • 顺序执行
                                                                                                                        • 程序在文本中从上到下是一行行写的
                                                                                                                        • 解释器是从上到下是一行行解释的
                                                                                                                        • 调试也是从头到尾一行行执行的

                                                                                                                        image.gif编辑

                                                                                                                          相关文章
                                                                                                                          |
                                                                                                                          2天前
                                                                                                                          |
                                                                                                                          Python
                                                                                                                          简单的 Python 计算器程序
                                                                                                                          这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
                                                                                                                          8 3
                                                                                                                          |
                                                                                                                          5天前
                                                                                                                          |
                                                                                                                          监控 测试技术 API
                                                                                                                          Python Web应用程序构建
                                                                                                                          【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
                                                                                                                          17 4
                                                                                                                          |
                                                                                                                          7天前
                                                                                                                          |
                                                                                                                          人工智能 数据库 开发者
                                                                                                                          Python中的atexit模块:优雅地处理程序退出
                                                                                                                          Python中的atexit模块:优雅地处理程序退出
                                                                                                                          8 3
                                                                                                                          |
                                                                                                                          9天前
                                                                                                                          |
                                                                                                                          存储 索引 Python
                                                                                                                          Python从入门到精通——1.3.1练习编写简单程序
                                                                                                                          Python从入门到精通——1.3.1练习编写简单程序
                                                                                                                          |
                                                                                                                          9天前
                                                                                                                          |
                                                                                                                          Python
                                                                                                                          过年了,让GPT用Python给你写个放烟花的程序吧!
                                                                                                                          过年了,让GPT用Python给你写个放烟花的程序吧!
                                                                                                                          16 0
                                                                                                                          |
                                                                                                                          14天前
                                                                                                                          |
                                                                                                                          存储 数据采集 NoSQL
                                                                                                                          使用Python打造爬虫程序之数据存储与持久化:从网络到硬盘的无缝对接
                                                                                                                          【4月更文挑战第19天】本文探讨了爬虫中的数据存储与持久化技术,包括文本文件存储、数据库(关系型与非关系型)、NoSQL数据库和键值存储,以及ORM框架的使用。根据数据类型、规模和访问需求选择合适存储方式,并注意数据安全、备份和恢复策略。正确选择和应用这些技术能有效管理和利用爬取数据。
                                                                                                                          |
                                                                                                                          14天前
                                                                                                                          |
                                                                                                                          数据采集 缓存 算法
                                                                                                                          使用Python打造爬虫程序之Python中的并发与异步IO:解锁高效数据处理之道
                                                                                                                          【4月更文挑战第19天】本文探讨了Python中的并发与异步IO,区分了并发(同时处理任务)与并行(同时执行任务)的概念。Python的多线程受限于GIL,适合IO密集型任务,而多进程适用于CPU密集型任务。异步IO通过非阻塞和回调/协程实现高效IO,Python的asyncio库提供了支持。应用场景包括Web开发和网络爬虫等。实践指南包括理解任务类型、使用asyncio、避免阻塞操作、合理设置并发度和优化性能。理解并运用这些技术能提升Python程序的效率和性能。
                                                                                                                          |
                                                                                                                          14天前
                                                                                                                          |
                                                                                                                          数据采集 JavaScript 前端开发
                                                                                                                          使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
                                                                                                                          【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
                                                                                                                          |
                                                                                                                          14天前
                                                                                                                          |
                                                                                                                          数据采集 前端开发 JavaScript
                                                                                                                          使用Python打造爬虫程序之揭开动态加载内容的神秘面纱:Python爬虫进阶技巧
                                                                                                                          【4月更文挑战第19天】本文探讨了如何用Python爬虫抓取动态加载内容。动态加载内容常由JavaScript异步加载,传统爬虫无法捕获。文章介绍了两种方法:1) 使用Selenium模拟浏览器行为,等待动态内容出现并提取数据;2) 分析网页API请求,直接模拟请求获取数据。同时,提醒注意性能、反爬策略和API变动等问题,强调持续学习与实践的重要性。
                                                                                                                          |
                                                                                                                          14天前
                                                                                                                          |
                                                                                                                          数据采集 XML 数据挖掘
                                                                                                                          使用Python打造爬虫程序之HTML解析大揭秘:轻松提取网页数据
                                                                                                                          【4月更文挑战第19天】本文介绍了HTML解析在爬虫技术中的重要性,并通过Python的BeautifulSoup库展示了如何解析和提取数据。文章涵盖了HTML文档结构、使用BeautifulSoup的基本方法,如`find_all()`、选择器(标签、类、ID选择器)以及提取文本、属性和链接。此外,还讨论了遍历和处理嵌套元素的技巧。