实现一些数值计算的算法,主要的精力都集中在把算法中的数学语言转化成编程代码了。代码质量就不高。常会出现很多小错误。py 没有编译,找错只能靠不断运行发现,但是这样一次只能改一个 bug 。每次调试都要比写下程序本身花数倍的时间,对精力是极大的损耗。
还有除了使用 print()语句,有没有什么好的调试技巧,可以使得调试更高效?
还有除了使用 print()语句,有没有什么好的调试技巧,可以使得调试更高效?

1 flyaway Oct 8, 2022 |
2 Yourshell Oct 8, 2022 除了 print 还可以使用 logging |
3 MaxLv Oct 8, 2022 pycharm debug 好使 |
4 vone Oct 8, 2022 |
5 siluni Oct 8, 2022 用 pytest 写单元测试吧 |
6 kmyq Oct 8, 2022 pycharm 直接调试就挺好使的啊 |
7 joApioVVx4M4X6Rf Oct 8, 2022 没用 Py 搞过复杂的数值计算并且调试,计算应该会有输入和中间结果吧?多在关键点打点 log吗,有的时候服务很难调试,只能通过看 log 判断哪儿有问题 |
8 arischow Oct 8, 2022 via iPhone 这跟有没有编译没有直接关系吧 |
9 dantangfan Oct 8, 2022 |
10 yuelang85 Oct 8, 2022 @dantangfan 这个 pylane 相当不错,目测可以在线 debug 生产环境进程 |
11 CamD Oct 8, 2022 via iPhone spyder 听说不错 |
12 qq976739120 Oct 8, 2022 之前也做过一些把论文翻译成代码的工作, 尽量一段段写或者抽离成一个个小函数,确认没问题了再写下去. 全部写完整体测然后找中间的 bug,真的很头疼很头疼. 后来就是重写的. |
13 JYLu OP @arischow 主要是编译的过程可以一次性发现许多结构性的问题,比如类型错误,什么的。现在就是每次测试都要跑一遍,每跑一遍只能发现一个错误,就很折磨。 |
14 Anarchy Oct 8, 2022 看楼主需求指编译对等工作,那就对应 lint 工具这块做的好不好了,pycharm 应该能满足吧。 |
15 pepesii Oct 8, 2022 可以尝试下接入一些监控相关的东西, 例如 sentry 可以加入一些 dataclass 或者 pydantic 的验证 尽可能的把函数或者模块抽离的更细粒度一些,确保每个模块级别的东西没有问题,input 和 output 能得到保证 |
17 TimePPT PRO 利用 lint 工具做代码规范检查 利用 mypy 做静态类型检查 利用 radon 做圈复杂度等检查 学会捕获和处理异常 关键步骤打 log |
18 lookStupiToForce Oct 8, 2022 pycharm debug mode 打断点或者勾选运行时报错自动中断进入调试都可以,保留你报错时的原发多层环境,方便调试和溯源 |
19 stein42 Oct 8, 2022 用 pycharm 可以实时提示语法错误,再加上类型标注可以避免类型错误。 单元测试可以确保一个函数得到期望的结果。 logging 可以在运行时输出一些信息,比 print 更好用。 |
22 clino Oct 8, 2022 说“py 没有编译”是错的,python 是编译成字节码以后运行的。 建议多写 test case 利于做回归测试,多加 assert 来针对边界情况进行低成本地预防。 |
24 wuwuta170 Oct 8, 2022 print 大法好 如果 是服务类型的调试 就 logging 大法, |
25 wuwuta170 Oct 8, 2022 90%的 bug 都能通过 print 大法和 Logging 大法搞定 |
26 fakepoet Oct 8, 2022 看到“代码质量就不高”这句,联想到了之前项目中做的一些“临时逻辑”,写的时候不注重抽象和便于测试,最后带来了很多隐藏 bug 。debug 的具体手段我觉得不太重要,print 和 logging 就够用了,建议把代码组织好,整洁一些,方便阅读也方便测试和 debug 。 |
27 dantangfan Oct 8, 2022 @yuelang85 没问题的,本来就是一直内部使用的线上诊断工具开源出来的。 |
29 fzls Oct 8, 2022 |