首页 > 编程知识 正文

python写代码调试技巧的简单介绍

时间:2023-12-08 14:00:31 阅读:313397 作者:RJMV

本文目录一览:

  • 1、满满干货!20个Python使用的小技巧
  • 2、python调试程序BUG的心得技巧分享
  • 3、调试python代码的方法有哪些

满满干货!20个Python使用的小技巧

本节对一些 Python 易混淆的操作进行对比。

1.1 有放回随机采样和无放回随机采样

1.2 lambda 函数的参数

1.3 copy 和 deepcopy

复制和变量别名结合在一起时,容易混淆:

对别名的修改会影响原变量,(浅)复制中的元素是原列表中元素的别名,而深层复制是递归地进行复制,对深层复制的修改不影响原变量。

1.4 == 和 is

1.5 判断类型

1.6 字符串搜索

1.7 List 后向索引

这个只是习惯问题,前向索引时下标从0开始,如果反向索引也想从0开始可以使用~。

2.1 读写 CSV 文件

注意,当 CSV 文件过大时会报错:_csv.Error: field larger than field limit (131072),通过修改上限解决

csv 还可以读以 分割的数据

2.2 迭代器工具

itertools 重新定义了很多迭代器工具,例如子序列工具:

序列排序:

多个序列合并:

2.3 计数器

计数器可以统计一个可迭代对象中每个元素出现的次数。

2.4 带默认值的 Dict

当访问不存在的 Key 时,defaultdict 会将其设置为某个默认值。

2.5 有序 Dict

3.1 输出错误和警告信息

向标准错误输出信息

输出警告信息

控制警告消息的输出

3.2 代码中测试

有时为了调试,我们想在代码中加一些代码,通常是一些 print 语句,可以写为:

一旦调试结束,通过在命令行执行 -O 选项,会忽略这部分代码:

3.3 代码风格检查

使用 pylint 可以进行不少的代码风格和语法检查,能在运行之前发现一些错误

3.4 代码耗时

耗时测试

测试某代码块耗时

代码耗时优化的一些原则

4.1 argmin 和 argmax

argmax同理。

4.2 转置二维列表

4.3 一维列表展开为二维列表

python调试程序BUG的心得技巧分享

【导读】相信各位Python工程师们在写Python代码的时候,免不了经常会出现bug满天飞这种情况,这个时候我们可能就得一个标点一个标点的去排查,费时又费力,但是,我们又很难发现到底是其中的哪一个步骤,导致了这些问题的出现。导致这些问题的其中一个原因,就是我们没有养成良好的编程习惯。编程习惯就好比是电影中的特效。电影特效越好,呈现出来的观影效果也自然越好。同样,如果我们能够养成好的编程习惯,在查找错误的时候,自己的思路就会更加清晰。下面是小编整理的解决Python项目bug的心得技巧分享,包含六小点,希望对大家有所帮助。

方法一:使用项目管理工具

无论Python项目简单与否,我们都应该使用Git进行版本控制。大部分支持Python的IDE(集成开发环境)都内置了对Git这一类项目管理工具的支持。

我们在修改代码时,常常会出现改着改着程序就崩了的情况,改出的最新版本有时候还不如上一个版本。而Git,恰好能够及时帮我们保存之前的版本。使用了它以后,我们也不需要不停地用“ctrl+z”来撤回代码了。

方法二:使用Python的内置函数

Python的内置函数和标准库都可以处理常见的用例,而不需要自己重新定义函数。

但是,刚刚入门的Python开发人员们对其中的函数并不熟悉。所以他们经常会遇到这样一个问题——在不需要记住内容的情况下,如何才能知道标准库中的内容是否涵盖了自己的用例?最简单的方法是将标准库索引和内置函数概述页添加为书签,并且在遇到“日常编程”类问题的时候立即浏览一下。我们使用这些函数的频率高了,自然也就能记住这些函数了。

方法三:使用正确的模块

与内置函数和标准库一样,Python中大量的第三方模块集合,也可以帮助我们节省大量的人力。通过PyPI的Web前端,可以针对我们的问题触发搜索词,我们很容易就能找到适合自己的解决方案。

方法四:使用OOP

面向对象编程(OOP)将数据结构与用于操作它们的方法捆绑在一起,从而使编写高级代码更加容易。OOP非常适合用于Python这一类高级语言,尤其是项目非常复杂的时候。熟悉Python的开发人员都知道,使用OOP可以减少代码量,从而节省大量的时间。

但是,也不是所有的项目都需要使用OOP。如果项目没有特别要求,一些小型的项目就可以不用OOP。

方法五:编写测试代码并不断测试

一个好的程序员一定知道测试之于项目的重要性。编写测试代码的确是一个很枯燥的过程,但是不进行测试,我们就无法发现程序的问题所在。

如果一个项目非常复杂的话,我们就必须要做到及时测试。越早测试,就能越早发现问题。而不是说等代码全部写完了,才开始进行测试,这样反而会导致更多的错误和更大的工作量。

当然,我们也可以寻找专业的软件测试人员,来帮助我们进行测试。这样我们也可以把更多的精力投入到项目程序本身。

方法六:选择正确的Python版本

部分人仍然在使用Python2,但Python官方的开发团队早已经不对这一版本进行维护了。聪明的开发人员都已经将Python2里的项目迁移到Python3中了。

Python目前的最新版本是Python3.8.5,但也不是说你一定要使用最新版本。专业的软件开发人员都知道,任何软件的最新版本都不一定是最好的,因为它仍需要开发团队不断地去改良。程序员一般都会使用在最新版本之前的一个版本,旧版本相对而言是比较成熟的。

无论是运用哪一种语言编写代码,优秀的程序员都具备良好的编程习惯。这些习惯不仅能够让我们思路更加清晰,也可以帮助我们减轻工作量,从而节省大量的时间。所以,可能你离优秀的程序员,只差一个好习惯了哦~

以上就是小编今天给大家整理发送的关于“解决Python项目BUG的心得技巧分享”的相关内容,希望对大家有所帮助。小编认为要想在大数据行业有所建树,需要考取部分含金量高的数据分析师证书,这样更有核心竞争力与竞争资本。

调试python代码的方法有哪些

本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序

源码例子

例如,有模拟税收计算的程序:

#!/usr/bin/python

def debug_demo(val):

if val = 1600 :

print "level 1"

print 0

elif val = 3500 :

print "level 2"

print (val - 1600) * 0.05

elif val = 6500 :

print "level 3"

print (val - 3500) * 0.10 + (3500-1600) * 0.05

else:

print "level 4"

print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05

#~def debug_demo

if __name__ == "__main__":

debug_demo(4500)

debug_demo函数计算4500的入账所需的税收。

如何调试?

1.加入断点

在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试)。

#!/usr/bin/python

_DEBUG=True

def debug_demo(val):

if _DEBUG == True:

import pdb

pdb.set_trace()

if val = 1600 :

print "level 1"

print 0

elif val = 3500 :

print "level 2"

print (val - 1600) * 0.05

elif val = 6500 :

print "level 3"

print (val - 3500) * 0.10 + (3500-1600) * 0.05

else:

print "level 4"

print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05

#~def debug_demo

if __name__ == "__main__":

debug_demo(4500)

2.开始运行调试

运行程序./debug_demo.py,得到

/usr/local/qspace/user_network/debug_demo.py(7)debug_demo()

- if val = 1600 :

(Pdb)

- val = 1600 : 指示当前执行的语句,(Pdb)等待你的调试指令. pdb的指令很丰富,输入h指令可以查看指令的使用方法。下面简单介绍常用指令:

查看代码上下文,l(小写L)

(Pdb) l

2 _DEBUG=True

3 def debug_demo(val):

4 if _DEBUG == True:

5 import pdb

6 pdb.set_trace()

7 - if val = 1600 :

8 print "level 1"

9 print 0

10 elif val = 3500 :

11 print "level 2"

12 print (val - 1600) * 0.05

(Pdb)

左边是行号,右边是代码正文。

监视变量:p 变量名

(Pdb) p val

4500

(Pdb)

单步执行: n

- elif val = 3500 :

(Pdb) l

5 import pdb

6 pdb.set_trace()

7 if val = 1600 :

8 print "level 1"

9 print 0

10 - elif val = 3500 :

11 print "level 2"

12 print (val - 1600) * 0.05

13 elif val = 6500 :

14 print "level 3"

15 print (val - 3500) * 0.10 + (3500-1600) * 0.05

加入断点:b 行号

(Pdb) b 14

运行到断点: c

(Pdb) c

/*****

- print "level 3"

(Pdb) l

9 print 0

10 elif val = 3500 :

11 print "level 2"

12 print (val - 1600) * 0.05

13 elif val = 6500 :

14 B- print "level 3"

15 print (val - 3500) * 0.10 + (3500-1600) * 0.05

16 else:

17 print "level 4"

18 print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05

19

执行到函数返回前: r

(Pdb) r

level 3

195.0

--Return--

/****()

-None

- print (val - 3500) * 0.10 + (3500-1600) * 0.05

(Pdb)

说明:

pdb还有很多其他很多有用的指令,读者可以自行探索。输入h,h 命令。就可以得到命令的详细帮助。

不过,我个人认为一般无需启动这种调试方法,一般使用日志输出进行调试即可,除非遇到了非常微妙的错误。这时,单步调试的威力便显示出来了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。