北京科技网站开发,如何创立自己的公司,官方网站建设的目标,小程序搭建怎么赚钱大家好#xff0c;给大家分享一下一个有趣的事情#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看#xff01; 对于每个程序开发者来说#xff0c;调试几乎是必备技能。常用Pycharm编辑器里的方法有Print大法、log大法#xff0c;但缺少类似Matlab的…大家好给大家分享一下一个有趣的事情很多人还不知道这一点。下面详细解释一下。现在让我们来看看 对于每个程序开发者来说调试几乎是必备技能。常用Pycharm编辑器里的方法有Print大法、log大法但缺少类似Matlab的变量区给代码调试带来不便特别是在有函数的情况下变量无法实时查看火车采集器伪原创。 1、Python Console 在Pycharm编辑器里面有个Python Console可以查看变量变化但对于函数变量难调试。 2、PySnooper 安利一款非常好用的调试工具它能在一些场景下大幅度提高调试的效率 那就是 PySnooper 2.1、快速安装 执行下面这些命令进行安装 PySnooper pip install pysnooper 2.2、简单案例 下面这段代码定义了一个 test 的函数在里面生成一个 person 的字典变量然后去更新它最后返回。 import pysnooperpysnooper.snoop()def test(): person {} person[name] domi person[age] 28 person[gender] male return persondef main(): author test()main() 输出结果 21:25:21.875841 call 5 def test():21:25:21.875841 line 6 person {}New var:....... person {}21:25:21.875841 line 7 person[name] domiModified var:.. person {name: domi}21:25:21.876840 line 8 person[age] 28Modified var:.. person {name: domi, age: 28}21:25:21.876840 line 9 person[gender] maleModified var:.. person {name: domi, age: 28, gender: male}21:25:21.876840 line 10 return person21:25:21.876840 return 10 return personReturn value:.. {name: domi, age: 28, gender: male}Elapsed time: 00:00:00.000999 PySnooper 把函数运行的过程全部记录了下来包括 代码的片段、行号等信息以及每一行代码是何时调用的 函数内局部变量的值如何变化的何时新增了变量何时修改了变量。 函数的返回值是什么 运行函数消耗了多少时间 2.3、重定向到日志文件 pysnooper.snoop() 不加任何参数时会默认将调试的信息输出到标准输出。对于单次调试就能解决的 BUG 这样没有什么问题但是有一些 BUG 只有在特定的场景下才会出现需要你把程序放在后面跑个一段时间才能复现。这种情况下你可以将调试信息重定向输出到某一日志文件中方便追溯排查。 pysnooper.snoop(output./debug.log)def test(): 2.4、跟踪非局部变量值 PySnooper 是以函数为单位进行调试的它默认只会跟踪函数体内的局部变量若想跟踪全局变量可以给 pysnooper.snoop() 加上 watch 参数 out {foo: bar}pysnooper.snoop(watch(out[foo]))def test(): person {} person[name] domi person[age] 28 person[gender] male out[foo] test return person 2.5、设置跟踪函数的深度 当你使用 PySnooper 调试某个函数时若该函数中还调用了其他函数PySnooper 是不会傻傻的跟踪进去的。如果你想继续跟踪该函数中调用的其他函数可以通过指定 depth 参数来设置跟踪深度不指定的话默认为 1。 pysnooper.snoop()def test(): person {} person[name] domi person[age] 28 person[gender] male c test1() return persondef test1(): a 1 b 2 return a b pysnooper.snoop(depth2) 2.6、设置调试日志的前缀 当你在使用 PySnooper 跟踪多个函数时调试的日志会显得杂乱无章不方便查看。在这种情况下PySnooper 提供了一个参数方便你为不同的函数设置不同的标志方便你在查看日志时进行区分。 pysnooper.snoop(output./debug.log, prefixtest: )def test(): person {} person[name] domi person[age] 28 person[gender] male c test1() return personpysnooper.snoop(output./debug.log, prefixtest1: )def test1(): a 1 b 2 return a b 2.7、支持多线程调试模式 PySnooper 同样支持多线程的调试通过设置参数 thread_infoTrue它就会在日志中打印出是在哪个线程对变量进行的修改。 pysnooper.snoop(thread_infoTrue)