PySnooper是一个非常方便的调试器。如果您试图弄清楚为什么您的Python代码没有按照您的预期运行,您会想要使用带有断点和监视功能的功能齐全的调试工具,但是许多调试工具配置起来很麻烦。现在有了PySnooper,你不需要再配置那么复杂的Debug工具,就可以完成对整段代码的分析。它告诉你正在运行什么代码以及局部变量的值是什么。实际上,PySnooper取代了逐行打印的重复性工作,给你的代码一个pysnooper装饰器,它可以自动识别语句和变量并打印出它们的值:importpysnooper@pysnooper.snoop()defnumber_to_bits(number):Number:Bits=[]WhileNumber:Number,Remainer=Divmod(Number,2)Bits.InSERT(0,Remainder)ReturnBitsElse:RETURN[0]Number_TO_BITS(6)效果如下:SOURCEPATH:.......1.pyStartingvar:..number=623:03:35.990701call4defnumber_to_bits(number):23:03:35.991699line5ifnumber:23:03:35.991699line6varbits:...New....bits=[]23:03:35.991699line7whilenumber:23:03:35.991699line8number,remainder=divmod(number,2)Modifiedvar:..number=3Newvar:.......remainder=023:03:35.991699line9bits.insert(0,remainder)Modifiedvar:..bits=[0]23:03:36.004664line7whilenumber:23:03:36.005661line8divmod(number,2)修改后的var:..number=1修改后的var:..remainder=123:03:36.005661line9bits.insert(0,remainder)Modifiedvar:..bits=[1,0]23:03:36.007657line7whilenumber:23:03:36.007657number,remainder=divmod(number,2)Modifiedvar:..number=023:03:36.008655line9bits.insert(0,remainder)Modifiedvar:..bits=[1,1,0]23:03:36.008655LINE7WhileNumber:23:03:36.009651Line10ReturnBits23:03:36.009651ReturnBits返回值:..[1,1,0]ELAPSEDTIME:00:00.020945,会看到。变量的值输出到屏幕上,方便你调试代码。只需要写一行代码——这种便捷的调试功能可以使用装饰器来实现,比一行一行地写print方便多了。0.安装模块要使用这个模块,只需要使用pip安装PySnooper:pipinstallpysnooper下面说一下这个模块其他有用的功能:1.支持日志文件。输出到日志文件,只需要将装饰器的那一行改成:@pysnooper.snoop('/my/log/file.log')2.如果要读入值,则读取外部变量或其他表达式装饰器范围外的变量或表达式也可以使用watch参数:@pysnooper.snoop(watch=('foo.bar','self.x["whatever"]'))3.如果你不这样做想要用装饰器,还可以通过上下文的形式进行调试。是的,装饰器的使用条件有限,使用起来也比较受限,所以pysnooper也支持使用with的context形式:importpysnooperimportrandomdeffoo():lst=[]foriinrange(10):lst.append(random.randrange(1,1000))和pysnooper.snoop():lower=min(lst)upper=max(lst)mid=(lower+upper)/2print(lower,mid,upper)foo()有如下效果,只会调试上下文中的代码:Newvar:.......i=9Newvar:.......lst=[681,267,74,832,284,678,...]09:37:35.881721line10lower=min(lst)Newvar:......lower=7409:37:35.882137line11upper=max(lst)Newvar:.......upper=83209:37:35.882304line12mid=(lower+upper)/274453.0832Newvar:......mid=453.009:37:35.882486line13print(lower,mid,upper)Elapsedtime:00:00:00.000344当我们只需要调试部分代码时,这种上下文调试方式非常方便。这是我们文章的结尾。如果喜欢今天的Python实战教程,请继续关注我。
