[oeasy]python029_ until_直接跳转到_unt_breakpoint_断点函数

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
性能测试 PTS,5000VUM额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 回顾早期计算机操作员多为女性,她们甚至发明了“bug”这个词。为了体验调试过程,我们故意在Python脚本中引入了一个拼写错误,并通过直接运行程序遇到了`NameError`。通过`until`命令,我们可以快速跳转到指定行执行,这对于大型项目非常有用。此外,`continue`(或简写`c`)命令则会一直执行到下一个断点或程序结束。我们还可以在代码中使用`breakpoint()`设置断点,配合`continue`命令使用,实现快速跳转至特定位置进行调试。这些技巧使调试过程变得高效且有趣,如同解开谜题一般。下次我们将探讨如何在调试过程中动态设置与取消断点。

until_直接跳转到_unt_breakpoint_断点函数 🥋

回忆上次内容

  • 上次 了解到
  • 计算机早期操作员 多是女性
  • 她们最早发明了 bug🕷 这个概念

  • 到现在也没有遇到一个bug
  • 如何才能让程序里面有bug 呢?

故意改错

  • 如果程序真的出了错误
  • 调试的时候会发生什么呢?

vi guido.py

  • 把第2行 故意改错

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

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

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

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

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

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

先直接运行

  • 如果是python3 guido.py
  • 会报NameError
  • 之后直接退回shell

  • 犯罪现场的各个变量的值
  • 都无法取得
  • 只是知道 这个报错结果
  • 再进入 调试程序

调试程序

  • 运行到第二行的时候
  • 系统报了错误

  • 发现错误
  • 是好事
  • 不是 我们无能的证明
  • 而是 努力的见证
  • 更是 进步的阶梯
  • 我们就知道了
  • 错误的位置
  • 错误的类型
  • 甚至可以观察
  • 当时的现场的状态

观察犯罪现场

  • 在错误发生的现场
  • 观察当时环境中的变量和状态

  • 可以在环境中观察
  • print
  • pront
  • 一步步地 把bug找出来
  • 就像 把凶手 找出来 一样!

最真实的解谜游戏

  • debug是 我见过最真实的 解谜游戏 了
  • 比 剧本杀 好玩多了
  • 一步步地分析
  • 找不到凶手的 时候
  • 需要冷静地分析

  • 找到凶手的 时候
  • 那种快乐太真实了!!!

改回正确

  • 回到vim
  • 并且 修改了
  • 第二行pront的错误

  • 但这一行行执行
  • 实在 有点慢啊
  • 毕竟 都经历过 万行代码 了
  • 得 按10000次的n 才能执行完 啊?
  • 快点的方法吗?🤔
  • 可以直接跳到某一行吗?

until 直接跳到

  • 查询 until 的帮助

  • 我们去试试

until 使用

  • until 5
  • 可以直接运行到第5行
  • 如果有问题
  • 就会爆出来
  • 如果没有问题
  • 就等待后续
  • next
  • until

  • 这样可以
  • 快速捋到犯罪现场
  • 找到出bug时的状态
  • 除了 until之外
  • 还有什么命令
  • 可以 让流程 更快速地 流动吗?

continue

  • 快速流动这个命令叫做 continue
  • continue 可以缩写为
  • cont
  • c

  • continue就是一路向前
  • 直到 最后一行
  • 除非 遇到断点
  • breakpoint

一路向前

  • 由于没有断点
  • continue 会直接
  • 从第一句 执行到 最后一句

  • 如何让他在第3句之后停下来呢?

  • q命令退出pdb
  • 然后去编辑guido.py

指定 断点位置

  • 在第四行添加了一个函数
  • breakpoint()
  • 添加一个断点
  • 断点的位置
  • 不一定是 有bug的位置
  • 而是 为了找bug而设置的 观测点

  • 保存并退出vim
  • 重新用pdb3 运行 guido.py
  • 再试试 continue

调试过程

  • c这一下
  • 执行了三行代码
  • 直接continue 到了断点(breakpoint)

  • 断点位置
  • 是写到程序里的

再继续

  • 再continue一下

  • 就直接又绕道开头了

一个小笑话

  • 程序员 在公司写代码
  • 老婆 要他回来
  • 不回来 就离婚
  • 结果 他来了句
  • 等我修完这个bug
  • 就跟你离婚
  • 全部门的人 都愣住了
  • 领导 让他 赶紧回家
  • 他回复 死也不回家

  • 妻子 听完后
  • 安心地 挂上了电话
  • 再也没有
  • 比 这个更加 海枯石烂的爱情诺言!

总结

  • py文件
  • 按照顺序一行行执行的
  • 可以通过until命令
  • 直接跳转到某行

  • 还可以使用breakpoint()
  • 在程序中 设置断点
  • 然后配合continue
  • 一下子跳到断点位置
  • 但是这样 在debug的时候
  • 看不到 断点breakpoint 位置
  • 可以 在调试过程中
  • 动态地设置 或者 取消断点吗?🤔
相关文章
|
25天前
|
人工智能 Shell 开发工具
[oeasy]python062_在python中完成输入和输出_input_print
本文介绍了在Python中使用`input()`和`print()`函数完成输入和输出操作的基础知识。通过编写简单的程序,如问候用户和统计苹果数量,演示了如何添加提示信息、处理用户输入并输出结果。同时,回顾了上一次课程内容,包括`input`函数的参数和提示词的使用。文中还展示了如何在vim编辑器中编写和运行Python代码,并对vim和shell的基本操作进行了总结。最后提供了相关学习资源链接,方便读者进一步学习。
115 66
|
5天前
|
人工智能 Shell 开发工具
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
48 32
|
2天前
|
数据库 Python
[oeasy]python066_如何捕获多个异常_try_否则_else_exception
本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
33 24
|
8天前
|
缓存 Shell 开发工具
[oeasy]python064_命令行工作流的总结_vim_shell_python
本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
45 15
|
1月前
|
人工智能 Unix Java
[oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
本文探讨了Python中变量命名的几种常见方式,包括汉语拼音变量名、蛇形命名法(snake_case)和驼峰命名法(CamelCase)。回顾上次内容,我们主要讨论了使用下划线替代空格以提高代码可读性。实际编程中,当变量名由多个单词组成时,合理的命名惯例变得尤为重要。
84 9
|
1月前
|
C语言 Python
[oeasy]python058_一句话让python崩了
本文介绍了如何通过重新赋值`__builtins__`使Python环境崩溃,并探讨了下划线的来历及其在编程中的作用。文章回顾了上次内容,展示了覆盖内建模块导致系统崩溃的过程,解释了恢复方法,以及PEP 8规范中关于空格使用的建议。最后,文章总结了下划线在变量定义和提高代码可读性方面的重要性,并简述了其从打字机时代到计算机时代的演变。
34 10
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
30天前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
16 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。