一般在写Python代码的时候,如果你想找出为什么Python代码没有按预期执行,比如你想知道哪些正在运行,哪些没有running,和local变量的值是多少...通常我们使用带有断点和观察模式的成熟调试器,或者直接使用print语句打印出来。今天源妹给大家分享一款“穷版”的调试工具——PySnooperPySnooper可以让你进行与上面相同的操作,只需要给要调试的函数添加一个装饰器,而不需要构建正确的打印。您还将获得函数的详细日志,包括运行了哪些代码行、运行时间以及更改局部变量的时间。PySnooper非常易于使用,开发人员无需任何设置即可在任何大型代码库中使用它。您只需添加装饰器并通过将其路径指定为第一个参数来指定日志输出地址的路径。目前PySnooper在GitHub(GitHub地址:https://github.com/cool-RR/PySnooper)上获得了7047个Stars和371个Forks下面的例子写了一个返回二进制列表的函数。我们只需要通过添加@pysnooper.snoop()装饰器就可以了:importpysnooper@pysnooper.snoop()defnumber_to_bits(number):ifnumber:bits=[]whilenumber:number,remainder=divmod(number,2)bits.insert(0,remainder)returnbitselse:return[0]number_to_bits(6)输出如下:Startingvar:..number=615:29:11.327032call4defnumber_to_bits(number):15:29:11.327032line5ifnumber:15:29:11.327032line6bits=[]Newvar:.......bits=[]15:29:11.327032line7whilenumber:15:29:11.327032line8number,remainder=divmod(number,2)Newvar:......remainder=0Modifiedvar:..number=315:29:11.327032line9bits.insert(0,remainder)Modifiedvar:..bits=[0]15:29:11.327032line7whilenumber:15:29:11.327032line8number,remainder=divmod(number,2)Modifiedvar:..number=1Modifiedvar:..remainder=115:29:11.327032line9bits.insert(0,remainder)Modifiedvar:..bits=[1,0]15:29:11.327032line7whilenumber:15:29:11.327032line8number,remainder=divmod(number,2)Modifiedvar:..number=015:29:11.327032line9bits.insert(0,remainder)Modifiedvar:..bits=[1,1,0]15:29:11.327032line7whilenumber:15:29:11.327032line10returnbits15:29:11.327032return10returnbitsReturnvalue:..[1,1,0]featurestderr,可以输出选择到指定文件:@pysnooper.snoop('/my/log/file.log')查看一些非局部变量的变量值:@pysnooper.snoop(variables=('foo.bar','self.whatever'))显示一个函数调用的函数的snoop行:@pysnooper.snoop(深度=2)
