python写代码步骤_寻找Python代码错误的7个步骤

python写代码步骤

星期五下午三点。 为什么? 因为事情总是在星期五下午3点。 您会收到一条通知,告知客户客户在您的软件中发现了一个错误。 克服最初的疑虑后,您可以与DevOps联系,以了解应用日志的状况,因为您记得收到了有关它们已被移动的通知。

事实证明它们是您无法到达的地方,但是它们正处于移至Web应用程序的过程中-因此您将拥有一个漂亮的应用程序来搜索和阅读它们,但是当然,它还没有完成。 几天后就可以了。 我知道,完全不现实的情况,对吗? 不幸的是没有; 似乎日志或日志消息经常在错误的时间丢失。 在我们跟踪该错误之前,有一条公共服务公告:检查您的日志以确保它们位于您认为的位置,并定期记录您认为应该记录的内容。 当您不看这些东西时,它们会发生怎样的变化,真是太神奇了。

好的,所以您找到了日志或尝试了呼叫,确实,客户发现了一个错误。 甚至您可能以为您知道错误在哪里。

您立即打开您认为可能是问题的文件,然后开始四处查看。

1.请勿触摸您的代码

继续研究它,甚至可能提出一个假设。 但是在您开始研究代码之前,请先进行调用以创建错误并将其转换为测试。 这将是一个集成测试,因为尽管您可能会怀疑,但您仍不确定确切的问题出在哪里。

确保此测试失败。 这很重要,因为有时您进行的测试不会模仿未接来电。 如果您使用的网络或其他框架可能混淆测试,则尤其如此。 许多事情可能存储在变量中,但是不幸的是,并非总是显而易见的,仅通过查看测试,您在测试中进行的调用即可。 我并不是要说我已经创建了一个在尝试模仿中断呼叫时通过的测试,但是,嗯,我已经这样做了,我认为这不是特别寻常。 从我的错误中学习。

2.编写失败的测试

现在您的测试失败,或者测试有错误,现在该进行故障排除了。 但是在您进行此操作之前,让我们先检查一下堆栈,因为这使故障排除更加容易。

堆栈包含您已开始但尚未完成的所有任务。 因此,如果您要烘烤蛋糕并将面粉添加到面糊中,那么您的堆栈将是:

  • 做蛋糕
  • 做面糊
  • 加面粉

如果您对堆栈感到困惑,我强烈建议您在Python Tutor上玩,在执行代码行时您可以在其中观察堆栈。

现在,如果您的Python程序出了点问题,解释器将为您打印出有用的堆栈。 这意味着无论程序在做什么,现在都可以发现问题出在底层。

3.始终先检查堆栈底部

不仅堆栈底部可以看到发生了什么错误,而且堆栈的最后一行通常可以找到问题所在。 如果底部无济于事,并且您的代码已经有一段时间没有被删除了,那么运行它的帮助就令人惊讶。 我建议使用pylint或flake8。 它经常指向我一直忽略的错误所在。

如果错误看上去有些晦涩,则您的下一步可能只是向Google寻求帮助。 如果您不包括仅与代码相关的信息(例如变量,文件的名称等),那么运气会更好。如果您使用的是Python 3(应该使用Python 3),将很有帮助。搜索; 否则,Python 2解决方案往往占据主导地位。

从前,开发人员不得不在没有搜索引擎好处的情况下进行故障排除。 这是一个黑暗的时期。 利用所有可用的工具。

不幸的是,有时该问题较早发生,并且仅在堆栈底部执行的那一行中才变得明显。 想一想当蛋糕不升起时,如何忘记添加发酵粉会变得很明显。

现在该查询堆栈了。 问题很可能出在您的代码中,而不是Python核心甚至是第三方软件包中,这很有可能,因此请首先扫描堆栈以查找代码中的行。 另外,通常在您自己的代码中放置断点通常要容易得多。 将断点放在代码中再向上一点,环顾四周,看看事情看起来是否应该看起来像是应该的。

“但是玛丽亚,”我听到你说,“如果我有堆栈跟踪信息,但是对我来说测试失败,这对我很有帮助。我应该从哪里开始?”

Pdb,Python调试器。

在您的代码中找到您知道此调用应该到达的位置。 您应该至少可以找到一个地方。 在其中粘贴pdb中断。

题外话

为什么不打印声明? 我以前依赖打印语句。 有时它们仍然派上用场。 但是一旦我开始使用复杂的代码库,尤其是进行网络调用的代码库,打印就变得太慢了。 我最后到处都是打印语句,我不知道它们在哪里以及为什么,而且变得很复杂。 但是,还有一个更重要的原因是主要使用pdb。 假设您输入了一条打印语句,发现出了点问题—而且一定早就出错了。 但是,看看放置打印语句的函数,您不知道如何到达那里。 查看代码是了解您要去往哪里的好方法,但是对于学习过的地方却很糟糕。 是的,我在代码库中做了一个grep,以查找调用函数的位置,但这会变得很乏味,并且无法通过常用函数将其缩小很多。 Pdb可能非常有帮助。

您遵循我的建议,并在pdb中中断并运行测试。 它突然消失并再次失败,一点也没有中断。 保留断点,并在测试套件中已经运行了一个测试,该测试的功能与损坏的测试非常相似。 如果您有一个不错的测试套件,则应该能够找到与您认为失败的测试应该击中的代码相同的测试。 运行该测试,当它到达断点时,执行w并查看堆栈。 如果您不了解堆栈,另一个调用可能如何/在哪里发生混乱,请往堆栈中途走一圈,找到属于您的代码,然后在该文件中放置一个断点,在该文件的上方一行在堆栈跟踪中。 使用新测试再试一次。 继续来回移动,向上移动堆栈,找出呼叫出轨的地方。 如果您一直走到跟踪的顶部而没有遇到断点,那么恭喜您,您已经找到了问题:您的应用拼写错误。 这里没有经验,不,完全没有。

4.改变事物

如果仍然感到迷茫,请尝试进行新的测试,以使您稍有不同。 您可以使新测试生效吗? 有什么不同吗? 有什么关系 尝试更改其他内容。 一旦进行了测试,或者可能进行了其他测试,就可以安全地开始更改代码中的内容,以查看是否可以缩小问题的范围。 切记以全新的提交开始故障排除,以便您可以轻松撤消无济于事的更改。 (这是对版本控制的引用,如果您不使用版本控制,它将改变您的生活。嗯,也许它会使编码变得更容易。有关详细介绍,请参见“ 版本控制的可视指南 ”。)

5.休息一下

认真地说,当它不再是一种有趣的挑战或游戏而变得令人沮丧时,您最好的选择就是摆脱问题。 休息一下。 我强烈建议您散步并尝试考虑其他事情。

6.写下所有内容

当您回来时,如果您没有突然受到尝试的启发,请写下有关该问题的所有信息。 其中应包括:

  • 正是造成问题的电话
  • 到底发生了什么,包括任何错误消息或相关的日志消息
  • 正是您所期望的
  • 到目前为止,您已完成的工作以查找问题以及在故障排除过程中发现的任何线索

有时候,这是很多信息,但是请相信我,试图从零散的人中窃取信息真的很烦人。 尽量简明扼要,但要完整。

7.寻求帮助

我经常发现,只要写下所有信息,就会引发对我尚未尝试过的事情的思考。 当然,有时候,我点击“ 提交”按钮后立即意识到问题出在哪里。 无论如何,如果您在写下所有内容后仍然没有想到任何事情,请尝试向某人发送电子邮件。 首先,请尝试与您的项目相关的同事或其他人员,然后再进入项目电子邮件列表。 不要害怕寻求帮助。 大多数人都是善良且乐于助人的,我发现在Python社区中尤其如此。


玛丽亚·麦金利(Maria McKinley)将于2月23日至24日在西雅图举行的PyCascades 2019大会上展示《 狩猎臭虫》

翻译自: https://opensource.com/article/19/2/steps-hunting-code-python-bugs

python写代码步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值