我猜你需要这个Python调试工具

发表于:2019-5-08 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:Python编程

  一般情况下,在编写 Python 代码时,如果想弄清楚为什么 Python 代码没有按照预期执行的原因,比如你想知道哪些是正在运行,哪些没有运行,以及局部变量的值是什么...通常我们会使用包含断点和观察模式等功能成熟的调试器,或者直接使用 print 语句打印出来。
  今天,猿妹和大家分享一个“贫民版”调试工具——PySnooper
  PySnooper允许你执行以上相同的操作,只需为要调试的函数添加一个装饰器即可,而不需要构建正确的 print 打印。你还将得到函数的详细日志,包括运行了哪些代码行、何时运行以及何时更改了局部变量。
  PySnooper 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何设置。你只需添加装饰器,并为日志输出地址指定路径,方法是将其路径指定为第一个参数。
  目前,PySnooper在GitHub上已经获得 7047 个Star,371 个Fork(GitHub地址:https://github.com/cool-RR/PySnooper)
  示例
  以下编写了一个函数,通过返回一个二进制列表。我们只需要通过添加@pysnooper.snoop()装饰器就可以了:
   import pysnooper
  @pysnooper.snoop()
  def number_to_bits(number):
  if number:
  bits = []
  while number:
  number, remainder = divmod(number, 2)
  bits.insert(0, remainder)
  return bits
  else:
  return [0]
  number_to_bits(6)
  输出如下:
   Starting var:.. number = 6
  15:29:11.327032 call         4 def number_to_bits(number):
  15:29:11.327032 line         5     if number:
  15:29:11.327032 line         6         bits = []
  New var:....... bits = []
  15:29:11.327032 line         7         while number:
  15:29:11.327032 line         8             number, remainder = divmod(number, 2)
  New var:....... remainder = 0
  Modified var:.. number = 3
  15:29:11.327032 line         9             bits.insert(0, remainder)
  Modified var:.. bits = [0]
  15:29:11.327032 line         7         while number:
  15:29:11.327032 line         8             number, remainder = divmod(number, 2)
  Modified var:.. number = 1
  Modified var:.. remainder = 1
  15:29:11.327032 line         9             bits.insert(0, remainder)
  Modified var:.. bits = [1, 0]
  15:29:11.327032 line         7         while number:
  15:29:11.327032 line         8             number, remainder = divmod(number, 2)
  Modified var:.. number = 0
  15:29:11.327032 line         9             bits.insert(0, remainder)
  Modified var:.. bits = [1, 1, 0]
  15:29:11.327032 line         7         while number:
  15:29:11.327032 line        10         return bits
  15:29:11.327032 return      10         return bits
  Return value:.. [1, 1, 0]
  特性
  stderr,则可以将选择输出到指定文件:
  @pysnooper.snoop('/my/log/file.log')
  查看一些非局部变量的变量值:
 @pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
  显示函数调用的函数的snoop行:
  @pysnooper.snoop(depth=2)

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号