加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python里三个高逼格的调试神器

发布时间:2019-10-10 23:13:25 所属栏目:建站 来源:大刘
导读:调试是开拓进程中不行停止的一个环节,在Python中我们行使print、logging、assert等要领举办调试既简朴又适用,但事实有其范围性。本日这篇文章为各人带来三个器材,个中有Python的内置模块也有第三方库,它们提供了调试代码所需的大部门常用成果,将极大
副问题[/!--empirenews.page--]

调试是开拓进程中不行停止的一个环节,在Python中我们行使print、logging、assert等要领举办调试既简朴又适用,但事实有其范围性。本日这篇文章为各人带来三个器材,个中有Python的内置模块也有第三方库,它们提供了调试代码所需的大部门常用成果,将极大的晋升我们的开拓和bug解除服从。

Python里三个高逼格的调试神器

1.PDB

pdb是Python中的一个内置模块,启用pdb后可以对代码举办断点配置和跟踪调试。为了演示利便,我们筹备一个样例措施pdb_test.py:

  1. def countnumber(number): 
  2.  for i in range(number): 
  3.  print(i) 
  4. if __name__ == '__main__': 
  5.  countnumber(10) 

之后在终端中输入python -m pdb pdb_test.py呼吁,进入pdb的调试模式:

Python里三个高逼格的调试神器

这时我们就可以通过各类呼吁节制代码执行可能查察当前变量,譬喻l可以查察全部代码,n是执行下一步代码,p可以查察当前变量等等,必要留意的是呼吁n只会执行主措施中的代码,假如想要单步执行子函数中的代码,必要行使s指令,调试结果如下:

Python里三个高逼格的调试神器

可以看到,通过s指令(假如只想在主函数中单步执行可以行使n)和p指令,我们节制措施单步运行并及时查察了相干变量。可是单步执行事实是一种服从很是低下的调试方法,尤其今世码量较量大的时辰更是恶梦,这时就必要用到pdb的set_trace()要领,我们对样例措施pdb_test.py做一点修改:

  1. import pdb 
  2. def countnumber(number): 
  3.  for i in range(number): 
  4.  print(i) 
  5.  pdb.set_trace() 
  6. if __name__ == '__main__': 
  7.  countnumber(10) 

pdb.set_trace()的浸染就是在代码中配置断点,在pdb调试模式下,行使c呼吁就会直接跳转到下一个断点位置,假如之后没有其他断点就会执行完所有代码,调试结果如下:

Python里三个高逼格的调试神器

除了上面提到的几个指令以外,pdb尚有其他一些较量常用的呼吁(见下表),综合行使根基可以或许满意一般的调试需求。

Python里三个高逼格的调试神器

2.Better-exceptions

better-exceptions是一个Python第三方库,作者对他的界说是“使非常信息越发雅观和细致”。在正式行使之前先说下这个库的安装:

  • 第一步,行使pip install better_exceptions安装better-exceptions库;
  • 第二步,行使export BETTER_EXCEPTIONS=1(Linux / OSX)或setx BETTER_EXCEPTIONS 1(Windows)配置情形变量。

此刻就可以正常行使better-exceptions举办调试了,为了演示结果越发明明,我们对上文中的代码稍作修改作为本次的样例措施better_test.py:

  1. def divisionnumber(number, div): 
  2.  for i in range(div): 
  3.  print(number / i) 
  4. if __name__ == '__main__': 
  5.  divisionnumber(10, 10) 

很明明,上面这段代码在执行进程中会由于分母为0而抛出非常,此刻我们执行python better_test.py,看看启用了better-exceptions后的非常信息是什么样子的:

Python里三个高逼格的调试神器

从上面这幅图可以看出better-exceptions对非常信息的修改首要表此刻两个方面:

  • 一是对发生非常的代码举办了颜色标注;
  • 二是对发生非常的代码中的相干变量值举办了输出(包罗函数等工具);

这样一来,许多时辰我们只必要按照better-exceptions输出的帮助信息就能判定发生非常的位置和缘故起因,而不必像早年一样再次查察源代码并调查运行功效,正如作者所说:Pretty and more helpful。

可是,过多的信息输出也会有题目,那就是今世码层级布局较量伟大的时辰,better-exceptions输出的帮助信息也许会很是之多,就好比上面的divisionnumber函数,他地址的地点信息大都时辰我们并不体谅,为了屏障这些“垃圾”信息,我们可以在代码中加一行:

  1. better_exceptions.MAX_LENGTH = XXX 

XXX是应承表现的最大字符长度,好比这里配置为10,再来运行better_test.py这个措施就会是下面的功效:

Python里三个高逼格的调试神器

可以看到,对函数divisionnumber的注释只表现了最开始的"

除了上面提到的成果之外,better-exceptions还可以和logging尚有django无缝接入,这使得它的应用越发机动,关于这方面内容各人可以查察项目文档。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读