iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >为什么不要PySnoope中使用print进行调试
  • 342
分享到

为什么不要PySnoope中使用print进行调试

2023-06-06 18:06:02 342人浏览 八月长安
摘要

为什么不要PySnoope中使用print进行调试?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PySnooper 是一个非常方便的调试器。如果您正在试图弄清楚为什么您的pyt

为什么不要PySnoope中使用print进行调试?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

PySnooper 是一个非常方便的调试器。如果您正在试图弄清楚为什么您的python代码没有按照您的预期去做,您会希望使用具有断点和监视功能的成熟Debug工具,但是许多Debug工具配置起来非常麻烦。

其实,PySnooper 就是替代了一行一行print的重复性工作,给你的代码一个pysnooper装饰器,它能自动识别到语句和变量并将其值print出来:

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)

效果如下:

Source path:... 1.pyStarting var:.. number = 623:03:35.990701 call     4 def number_to_bits(number):23:03:35.991699 line 5   if number:23:03:35.991699 line 6     bits = []New var:....... bits = []23:03:35.991699 line 7     while number:23:03:35.991699 line 8       number, remainder = divmod(number, 2)Modified var:.. number = 3New var:....... remainder = 023:03:35.991699 line 9       bits.insert(0, remainder)Modified var:.. bits = [0]23:03:36.004664 line 7     while number:23:03:36.005661 line 8       number, remainder = divmod(number, 2)Modified var:.. number = 1Modified var:.. remainder = 123:03:36.005661 line 9       bits.insert(0, remainder)Modified var:.. bits = [1, 0]23:03:36.007657 line 7     while number:23:03:36.007657 line 8       number, remainder = divmod(number, 2)Modified var:.. number = 023:03:36.008655 line 9       bits.insert(0, remainder)Modified var:.. bits = [1, 1, 0]23:03:36.008655 line 7     while number:23:03:36.009651 line 10     return bits23:03:36.009651 return   10     return bitsReturn value:.. [1, 1, 0]Elapsed time: 00:00:00.020945

可以看到,它将每一行变量的值都输出到屏幕上,方便你调试代码。

仅仅需要写一行代码—使用装饰器就可以实现这个方便的调试功能,比起一行行写print,这可方便多了。

0.安装模块

使用这个模块,你只需要使用Pip安装PySnooper:

pip install pysnooper

接下来讲讲这个模块其他好用的功能:

1.支持日志文件

如果你觉得print到屏幕上不方便,还可以将其输出到log文件中,你只需要将装饰器那一行改为:

@pysnooper.snoop('/my/log/file.log')

2.读取局外变量或其他表达式

如果你想读取在装饰器作用范围以外的变量或者表达式的值,还可以使用watch参数:

@pysnooper.snoop(watch=('foo.bar', 'self.x["whatever"]'))

3.如果你不想用装饰器,也可以用上下文的形式调试

没错,装饰器有限定的使用条件,使用起来比较局限,因此pysnooper还支持使用 with 的上下文形式:

import pysnooperimport random def foo():  lst = []  for i in range(10):    lst.append(random.randrange(1, 1000))   with pysnooper.snoop():    lower = min(lst)    upper = max(lst)    mid = (lower + upper) / 2    print(lower, mid, upper) foo()

效果如下,只有上下文里的代码才会被调试出来:

New var:....... i = 9New var:....... lst = [681, 267, 74, 832, 284, 678, ...]09:37:35.881721 line 10     lower = min(lst)New var:....... lower = 7409:37:35.882137 line 11     upper = max(lst)New var:....... upper = 83209:37:35.882304 line 12     mid = (lower + upper) / 274 453.0 832New var:....... mid = 453.009:37:35.882486 line 13     print(lower, mid, upper)Elapsed time: 00:00:00.000344

看完上述内容,你们掌握为什么不要PySnoope中使用print进行调试的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 为什么不要PySnoope中使用print进行调试

本文链接: https://www.lsjlt.com/news/248133.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么不要PySnoope中使用print进行调试
    为什么不要PySnoope中使用print进行调试?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PySnooper 是一个非常方便的调试器。如果您正在试图弄清楚为什么您的Pyt...
    99+
    2023-06-06
  • 为什么不用Print调试Python
    这篇文章主要介绍“为什么不用Print调试Python”,在日常操作中,相信很多人在为什么不用Print调试Python问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么不用Print调试Python”的疑...
    99+
    2023-06-15
  • python怎么用Print()函数进行调试
    小编给大家分享一下python怎么用Print()函数进行调试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用Print()函数进行调试对于较小的项目,可以用pr...
    99+
    2023-06-27
  • Python编程不要再使用print调试代码了
    目录1. 快速安装2. 简单案例3. 详细使用3.1 重定向到日志文件3.2 跟踪非局部变量值3.3 设置跟踪函数的深度3.4 设置调试日志的前缀3.5 设置最大的输出长度3.6 支...
    99+
    2024-04-02
  • 为什么无法使用 Docker/VScode 进行远程调试?
    在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《为什么无法使用 Docker/VScode...
    99+
    2024-04-04
  • 怎么使用eclipse进行程序调试
    使用Eclipse进行程序调试的步骤如下:1. 在Eclipse中打开要调试的Java项目,并确保项目已经编译成功。2. 在代码中设...
    99+
    2023-09-13
    eclipse
  • Node.js如何使用supervisor进行开发中调试
    这篇文章主要为大家展示了“Node.js如何使用supervisor进行开发中调试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Node.js如何使用super...
    99+
    2024-04-02
  • 为什么不要依赖MySQL高可用性进行维护
    本文小编为大家详细介绍“为什么不要依赖MySQL高可用性进行维护”,内容详细,步骤清晰,细节处理妥当,希望这篇“为什么不要依赖MySQL高可用性进行维护”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 高可用性...
    99+
    2023-07-04
  • Vue3中的ref为何要用.value进行值的调用呢
    目录Vue3中ref为何要用.value进行值的调用Vue3 ref告别.valueRef 语法糖在项目中的使用Vue3中ref为何要用.value进行值的调用 在Vue2中,所有的...
    99+
    2024-04-02
  • 为什么要使用Go语言进行并发编程?
    随着计算机技术的不断进步,人们对并发编程的需求也越来越高。并发编程是指同时执行多个任务的能力,其优点是可以提高程序的性能和响应速度。在传统的编程语言中,如C++和Java,实现并发编程需要使用线程和锁等复杂的机制。而Go语言则提供了一种更...
    99+
    2023-07-27
    同步 并发 日志
  • 为什么不要在using语句中调用WCF服务
    这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (C...
    99+
    2023-06-17
  • C#为什么要使用单元测试
    小编给大家分享一下C#为什么要使用单元测试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大...
    99+
    2023-06-17
  • 为什么要用Python进行数据分析
    这篇“为什么要用Python进行数据分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“为什么要用Python进行数据分析”文...
    99+
    2023-06-27
  • 在软件部署中如何使用strace进行调试
    这篇文章主要介绍在软件部署中如何使用strace进行调试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是 strace?strace 是一个用来“追踪系统调用”的工具。它主要是一个 Linux 工具,但是你也可以...
    99+
    2023-06-16
  • 如何在 Python 中使用 Django Shell 进行快速调试?
    Django 是一个高效的 Python Web 开发框架,它提供了许多有用的工具和库,使得 Web 开发变得更加容易和快捷。其中一个非常有用的工具就是 Django Shell。Django Shell 是一个交互式 Python sh...
    99+
    2023-07-26
    http django shell
  • vue中什么是路由懒加载?为什么要进行?
    vue中什么是路由懒加载?为什么要进行路由懒加载路由?下面本篇文章带大家了解一下vue中的路由懒加载,希望对大家有所帮助!路由懒加载懒加载本质是延迟加载或按需加载,即在需要的时候的时候进行加载。 首页不用设置懒加载,一个页面加载过后再次访问...
    99+
    2023-05-14
    路由懒加载 Vue
  • Linux为什么不用进行碎片整理
    本篇内容主要讲解“Linux为什么不用进行碎片整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux为什么不用进行碎片整理”吧!什么是磁盘碎片?  很多 Windows 的用户,甚至包括一...
    99+
    2023-06-28
  • 面试题:java中为什么foreach中不允许对元素进行add和remove
    目录1、foreach遍历ArrayList过程中使用 add 和 remove2、追根溯源2.1、modCount是什么?2.2、expectedModCount 是什么?2.3、...
    99+
    2024-04-02
  • pycharm debug怎么使用 pycharm进行debug调试的教程
    首先打开pycharm软件,导入一个项目,如下图所示 接着打开一个python文件,在要debug的地方添加一个断点,如下图所示 然后点击顶部的Run菜单,选择Debug选项,如下图...
    99+
    2024-05-10
    python pycharm
  • 如何在TensorFlow中使用TensorBoard进行可视化和调试
    TensorBoard是一个用于可视化和调试TensorFlow模型的工具,可以帮助用户更好地了解模型的结构、性能和训练过程。以下是...
    99+
    2024-03-01
    TensorFlow
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作