当前位置: 首页 > news >正文

白沙的网站建设网站模块设计怎么做

白沙的网站建设,网站模块设计怎么做,百度账号人工申诉,数据分析软件给大家推荐本我自己写的电子书《PyCharm中文指南》#xff0c;把各种 PyCharm 的高效的使用技巧用GIF动态图的形式展示出来。有兴趣的可以看它的在线文档#xff1a;http://pycharm.iswbm.com对于每个程序开发者来说#xff0c;调试几乎是必备技能。代码写到一半卡住了…给大家推荐本我自己写的电子书《PyCharm中文指南》把各种 PyCharm 的高效的使用技巧用GIF动态图的形式展示出来。有兴趣的可以看它的在线文档http://pycharm.iswbm.com对于每个程序开发者来说调试几乎是必备技能。代码写到一半卡住了不知道这个函数执行完的返回结果是怎样的调试一下看看代码运行到一半报错了什么情况怎么跟预期的不一样调试一下看看调试的方法多种多样不同的调试方法适合不同的场景和人群。如果你是刚接触编程的小萌新对很多工具的使用还不是很熟练那么 print 和 log 大法好如果你在本地(Win或者Mac)电脑上开发那么 IDE 的图形化界面调试无疑是最适合的如果你在服务器上排查BUG那么使用 PDB 进行无图形界面的调试应该是首选如果你要在本地进行开发但是项目的进行需要依赖复杂的服务器环境那么可以了解下 PyCharm 的远程调试除了以上今天明哥再给你介绍一款非常好用的调试工具它能在一些场景下大幅度提高调试的效率 那就是 PySnooper它在 Github 上已经收到了 13k 的 star获得大家的一致好评。有了这个工具后就算是小萌新也可以直接无门槛上手从此与 print 说再见~1. 快速安装执行下面这些命令进行安装 PySnooper$ python3 -m pip install pysnooper# 或者$ conda install -c conda-forge pysnooper# 或者$ yay -S python-pysnooper2. 简单案例下面这段代码定义了一个 demo_func 的函数在里面生成一个 profile 的字典变量然后去更新它最后返回。代码本身没有什么实际意义但是用来演示 PySnooper 已经足够。import pysnooperpysnooper.snoop()def demo_func():profile {}profile[name] 写代码的明哥profile[age] 27profile[gender] malereturn profiledef main():profile demo_func()main()现在我使用终端命令行的方式来运行它[rootiswbm ~]# python3 demo.pySource path:... demo.py17:52:49.624943 call 4 def demo_func():17:52:49.625124 line 5 profile {}New var:....... profile {}17:52:49.625156 line 6 profile[name] 写代码的明哥Modified var:.. profile {name: 写代码的明哥}17:52:49.625207 line 7 profile[age] 27Modified var:.. profile {name: 写代码的明哥, age: 27}17:52:49.625254 line 8 profile[gender] maleModified var:.. profile {name: 写代码的明哥, age: 27, gender: male}17:52:49.625306 line 10 return profile17:52:49.625344 return 10 return profileReturn value:.. {name: 写代码的明哥, age: 27, gender: male}Elapsed time: 00:00:00.000486可以看到 PySnooper 把函数运行的过程全部记录了下来包括代码的片段、行号等信息以及每一行代码是何时调用的函数内局部变量的值如何变化的何时新增了变量何时修改了变量。函数的返回值是什么运行函数消耗了多少时间而作为开发者要得到这些如此详细的调试信息你需要做的非常简单只要给你想要调试的函数上带上一顶帽子(装饰器) -- pysnooper.snoop() 即可。3. 详细使用2.1 重定向到日志文件pysnooper.snoop() 不加任何参数时会默认将调试的信息输出到标准输出。对于单次调试就能解决的 BUG 这样没有什么问题但是有一些 BUG 只有在特定的场景下才会出现需要你把程序放在后面跑个一段时间才能复现。这种情况下你可以将调试信息重定向输出到某一日志文件中方便追溯排查。pysnooper.snoop(output/var/log/debug.log)def demo_func():...2.2 跟踪非局部变量值PySnooper 是以函数为单位进行调试的它默认只会跟踪函数体内的局部变量若想跟踪全局变量可以给 pysnooper.snoop() 加上 watch 参数out {foo: bar}pysnooper.snoop(watch(out[foo]))def demo_func():...如此一来PySnooper 会在 out[foo] 值有变化时也将其打印出来watch 参数接收一个可迭代对象(可以是list 或者 tuple)里面的元素为字符串表达式什么意思呢看下面例子就知道了pysnooper.snoop(watch(out[foo], foo.bar, self.foo[bar]))def demo_func():...和 watch 相对的pysnooper.snoop() 还可以接收一个函数 watch_explode表示除了这几个参数外的其他所有全局变量都监控。pysnooper.snoop(watch_explode(foo, bar))def demo_func():...2.3 设置跟踪函数的深度当你使用 PySnooper 调试某个函数时若该函数中还调用了其他函数PySnooper 是不会傻傻的跟踪进去的。如果你想继续跟踪该函数中调用的其他函数可以通过指定 depth 参数来设置跟踪深度(不指定的话默认为 1)。pysnooper.snoop(depth2)def demo_func():...2.4 设置调试日志的前缀当你在使用 PySnooper 跟踪多个函数时调试的日志会显得杂乱无章不方便查看。在这种情况下PySnooper 提供了一个参数方便你为不同的函数设置不同的标志方便你在查看日志时进行区分。pysnooper.snoop(output/var/log/debug.log, prefixdemo_func: )def demo_func():...效果如下2.5 设置最大的输出长度默认情况下PySnooper 输出的变量和异常信息如果超过 100 个字符被会截断为 100 个字符。当然你也可以通过指定参数 进行修改pysnooper.snoop(max_variable_length200)def demo_func():...您也可以使用max_variable_lengthNone它从不截断它们。pysnooper.snoop(max_variable_lengthNone)def demo_func():...2.6 支持多线程调试模式PySnooper 同样支持多线程的调试通过设置参数 thread_infoTrue它就会在日志中打印出是在哪个线程对变量进行的修改。pysnooper.snoop(thread_infoTrue)def demo_func():...效果如下2.7 自定义对象的格式输出pysnooper.snoop() 函数有一个参数是 custom_repr它接收一个元组对象。在这个元组里你可以指定特定类型的对象以特定格式进行输出。这边我举个例子。假如我要跟踪 person 这个 Person 类型的对象由于它不是常规的 Python 基础类型PySnooper 是无法正常输出它的信息的。因此我在 pysnooper.snoop() 函数中设置了 custom_repr 参数该参数的第一个元素为 Person第二个元素为 print_persion_obj 函数。PySnooper 在打印对象的调试信息时会逐个判断它是否是 Person 类型的对象若是就将该对象传入 print_persion_obj 函数中由该函数来决定如何显示这个对象的信息。class Person:passdef print_person_obj(obj):return fpysnooper.snoop(custom_repr(Person, print_person_obj))def demo_func():...完整的代码如下import pysnooperclass Person:passdef print_person_obj(obj):return fpysnooper.snoop(custom_repr(Person, print_person_obj))def demo_func():person Person()person.name 写代码的明哥person.age 27person.gender malereturn persondef main():profile demo_func()main()运行一下观察一下效果。如果你要自定义格式输出的有很多个类型那么 custom_repr 参数的值可以这么写pysnooper.snoop(custom_repr((Person, print_person_obj), (numpy.ndarray, print_ndarray)))def demo_func():...还有一点我提醒一下元组的第一个元素可以是类型(如类名Person 或者其他基础类型 list等)也可以是一个判断对象类型的函数。也就是说下面三种写法是等价的。# 【第一种写法】pysnooper.snoop(custom_repr(Person, print_persion_obj))def demo_func():...# 【第二种写法】def is_persion_obj(obj):return isinstance(obj, Person)pysnooper.snoop(custom_repr(is_persion_obj, print_persion_obj))def demo_func():...# 【第三种写法】pysnooper.snoop(custom_repr(lambda obj: isinstance(obj, Person), print_persion_obj))def demo_func():...以上就是明哥今天给大家介绍的一款调试神器(PySnooper) 的详细使用手册是不是觉得还不错内容来源于网络如有侵权请私信删除
http://www.zqtcl.cn/news/185644/

相关文章:

  • 杭州网站建设公司有哪些瑞诺国际的数字营销模式
  • 宣城网站建设 有限公司高州做网站
  • 做外贸最适合的网站系统有可以做国外支付系统的网站吗
  • 建设执业资格注册中心网站办事大厅ui设计素材库
  • 个人网站免费建站4399电脑版网页链接
  • 重庆开县网站建设公司推荐网站建设与维护高职
  • 关于网站开发的技术博客海口网站设计建设
  • xx市院门户网站建设方案做视频特技的网站
  • 肇庆seo公司咨询23火星seo 网站
  • 天元建设集团有限公司破产新手seo网站做什么类型好
  • spa.net网站开发二次开发需要什么
  • 如何做网站静态页面商丘网签查询
  • 网站建设好学么模版型网站是怎样的
  • 网站维护建设费应计入科目高端营销型网站制作
  • 推荐几个好的网站wordpress 加载数据库表格也卖弄
  • 承德网站开发找人做网站安全吗
  • 百度网站推广电话眼镜网站怎么做竞价
  • 邢台建设银行官方网站为什么建设网站很多公司没有
  • 闵行做网站费用湖南正规网络营销哪家便宜
  • 找个公司做网站需要注意什么wordpress用户名长度
  • 推荐几个没封的正能量网站营销技巧和营销方法视频
  • html mip 网站桂林市临桂区
  • 做网站如何月入10万建行app怎么注册登录
  • 建设一个旅游网站毕业设计建设网站的功能定位是什么原因
  • wordpress网站导航模板杭州建设网站的公司
  • 如何做视频解析网站wordpress 关闭评论
  • 安福网站建设微信开发者工具怎么下载
  • 网罗设计网站威海网页设计制作公司
  • 网站用cmswordpress插件怎么做
  • 如何办好公司网站元器件网站搭建