前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >新手上路,如何debug调试程序?

新手上路,如何debug调试程序?

作者头像
Crossin先生
发布2023-08-29 14:53:00
发布2023-08-29 14:53:00
19100
代码可运行
举报
运行总次数:0
代码可运行

大家好,欢迎来到 Crossin的编程教室 !

写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能反复重新运行程序,期待忽然有次结果就对了。

今天我就来分享一些代码遇到问题时的调试经验和解决技巧,希望对你有所帮助。

1. 读错误信息

来看如下一个例程:

代码语言:javascript
代码运行次数:0
复制
import random
a = 0
for i in range(5):
    b = random.choice(range(5))
    a += i / b
print(a)

这个程序中,i 从 0 循环到 4,每次循环中,b 是 0 到 4 中的一个随机数。把 i / b 的结果累加到 a 上,最后输出结果。

运行这段程序,有时候会输出结果,有时候却跳出错误信息:

代码语言:javascript
代码运行次数:0
复制
Traceback (most recent call last):
  File "C:\Users\Crossin\Desktop\py\test.py", line 6, in <module>
    a += i / b
ZeroDivisionError: integer division or modulo by zero

有些同学看见一段英文提示就慌了。其实没那么复杂,python的错误提示做得还是很标准的。

它告诉我们错误发生在test.py文件中的第6行

a += i / b

这一句上。

这个错误是“ZeroDivisionError”,也就是除零错。

“integer division or modulo by zero”,整数被0除或者被0模(取余数)。

因为0不能作为除数,所以当b随机到0的时候,就会引发这个错误。

知道了原因,就可以顺利地解决掉这个bug。

以后在写代码的时候,如果遇到了错误,先别急着去改代码。试着去读一读错误提示,看看里面都说了些啥。

2. 输出调试信息

我们在所有课程的最开始就教了输出函数“print”。它是编程中最简单的调试手段。有的时候,仅从错误提示仍然无法判断出程序错误的原因,或者没有发生错误,但程序的结果就是不对。这种情况下,通过输出程序过程中的一些状态,可以帮助分析程序。

把前面那个程序改造一下,加入一些与程序功能无关的输出语句:

代码语言:javascript
代码运行次数:0
复制
import random
a = 0
for i in range(5):
    print('i:', i)
    b = random.choice(range(5))
    print('b:', b)
    a += i / b
    print('a:', a)
    print()
print(a)

运行后的输出结果(每次结果都会不一样):

代码语言:javascript
代码运行次数:0
复制
i: 0
b: 3
a: 0.0


i: 1
b: 4
a: 0.25


i: 2
b: 0
Traceback (most recent call last):
  File "C:\Users\Crossin\Desktop\py\test.py", line 8, in <module>
    a += i / b
ZeroDivisionError: integer division or modulo by zero

当b的值为0时,发生了除零错。这次可以更清晰地看出程序出错时的状态。

在真实开发中,程序的结构可能会非常复杂。通过输出调试信息,可以有效地缩小范围、定位错误发生的位置,确认错误发生时的场景,进而找出错误原因。

还有其他一些调试技巧,如使用断点调试,借助IDE的错误提示等,可以参考我之前写过的文章:

开发5分钟,调试2小时 - 你的问题在哪里?

如何在 Python 中使用断点调试

_往期文章推荐_

如何用ChatGPT学Python

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档