本文目录一览:
- 1、python调试程序BUG的心得技巧分享
- 2、《Python宝典》txt下载在线阅读全文,求百度网盘云资源
- 3、python代码bug求解
- 4、Python中的bug有多可怕?
- 5、python编程bug
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宝典》txt下载在线阅读全文,求百度网盘云资源
《Python宝典》(杨佩璐/宋强)电子书网盘下载免费在线阅读
链接:
提取码:rbpu
书名:《Python宝典》
作者:杨佩璐/宋强
译者:
豆瓣评分:
出版社:电子工业出版社
出版年份:2014-5
页数:504
内容简介:Python是目前流行的脚本语言之一。《Python宝典》由浅入深、循序渐进地为读者讲解了如何使用Python进行编程开发。《Python宝典》内容共分三篇,分为入门篇、高级篇和案例篇。入门篇包括Python的认识和安装、开发工具简介、Python基本语法、数据结构与算法、多媒体编程、系统应用、图像处理和GUI编程等内容。高级篇包括用Python操作数据库、进行Web开发、网络编程、科学计算、多线程编程等内容。案例篇选择了3个案例演示了Python在Windows系统优化、大数据处理和游戏开发方面的应用。
《Python宝典》针对Python的常用扩展模块给出了详细的语法介绍,并且给出了典型案例,通过对《Python宝典》的学习,读者能够很快地使用Python进行编程开发。
《Python宝典》适合Python初学者、程序设计人员、编程爱好者、本科及大专院校学生,以及需要进行对科学的计算的工程人员阅读。
python代码bug求解
错误在于下一次迭代时,n会变成下一个奇数5,
而18行的代码通过传递参数n锁定了n值
可以通过输出一些log查看:
以下代码通过把lambda展开成普通函数,并输出调用filter函数的参数来查看,比较一下就能明白了。
def _not_divisible(n):
def func(x):
print("!!!!!!!!!!!!!")
print(x, n)
return x % n 0
return func
def primes():
yield 2
print(1111)
it = _odd_iter()
while True:
n = next(it)
print(2222)
yield n
def func(x):
print("!!!!!!!!!!!!!")
print(x, n)
return x % n 0
it = filter(func, it)
#it = filter(_not_divisible(n), it)
Python中的bug有多可怕?
明敏 发自 凹非寺
量子位 报道 | 公众号 QbitAI
到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰?
还别说,这个bug虽小,但有够“狡猾”的。
这就是最近Reddit上热议的一个话题,是一位网友在使用再平常不过的Pytorch+Numpy组合时发现。
最主要的是,在代码能够跑通的情况下,它甚至还会影响模型的准确率!
除此之外,网友热议的另外一个点,竟然是:
而是它到底算不算一个bug?
这究竟是怎么一回事?
事情的起因是一位网友发现,在PyTorch中用NumPy来生成随机数时,受到数据预处理的限制,会多进程并行加载数据,但最后每个进程返回的随机数却是相同的。
他还举出例子证实了自己的说法。
如下是一个示例数据集,它会返回三个元素的随机向量。这里采用的批量大小分别为2,工作进程为4个。
然后神奇的事情发生了:每个进程返回的随机数都是一样的。
这个结果会着实让人有点一头雾水,就好像数学应用题求小明走一段路程需要花费多少时间,而你却算出来了负数。
发现了问题后,这位网友还在GitHub上下载了超过10万个PyTorch库,用同样的方法产生随机数。
结果更加令人震惊:居然有超过95%的库都受到这个问题的困扰!
这其中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也承认自己“被坑过”!
但有一说一,这个bug想要解决也不难:只需要在每个epoch都重新设置seed,或者用python内置的随机数生成器就可以避免这个问题。
到底是不是bug?
如果这个问题已经可以解决,为什么还会引起如此大的讨论呢?
因为网友们的重点已经上升到了“哲学”层面:
这到底是不是一个bug?
在Reddit上有人认为:这不是一个bug。
虽然这个问题非常常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。
就是这个观点,激起了千层浪花,许多人都认为他忽略了问题的关键所在。
这不是产生伪随机数的问题,也不是numpy的问题,问题的核心是在于PyTorch中的DataLoader的实现
对于包含随机转换的数据加载pipeline,这意味着每个worker都将选择“相同”的转换。而现在NN中的许多数据加载pipeline,都使用某种类型的随机转换来进行数据增强,所以不重新初始化可能是一个预设。
另一位网友也表示这个bug其实是在预设程序下运行才出现的,应该向更多用户指出来。
并且95%以上的Pytorch库受此困扰,也绝不是危言耸听。
有人就分享出了自己此前的惨痛经历:
我认识到这一点是之前跑了许多进程来创建数据集时,然而发现其中一半的数据是重复的,之后花了很长的时间才发现哪里出了问题。
也有用户补充说,如果 95% 以上的用户使用时出现错误,那么代码就是错的。
顺便一提,这提供了Karpathy定律的另一个例子:即使你搞砸了一些非常基本代码,“neural nets want to work”。
你有踩过PyTorch的坑吗?
如上的bug并不是偶然,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上还有PyTorch的坑之总结,被浏览量高达49w。
其中从向量、函数到model.train(),无论是真bug还是自己出了bug,大家的血泪史还真的是各有千秋。
所以,关于PyTorch你可以分享的经验血泪史吗?
欢迎评论区留言讨论~
参考链接:
[1]
[2]
[3]
— 完 —
python编程bug
"""
if rname == 'ipython console' or rname.endswith('string'):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xca in position 38: ordinal not in range(128)
"""
似乎rname是一个unicode的串, 在与"ipython consone", "string" 进行比较时先进行了转换,但其中包含非ascii字符导致转换异常的问题。
建议简单地改成:
if rname == u'ipython console' or rname.endswith(u'string'):