有意制造漏洞的代码(Python)

5

这是一个奇怪的请求,但我正在寻找有缺陷的Python代码。我想了解更多关于错误和调试器的知识,并且需要一些有缺陷的代码来进行操作。不幸的是,我写的所有代码都很短小并且没有错误(到目前为止)。

最好不要是GUI相关的(因为我刚开始学习它),但任何东西都可以。

提前感谢


13
继续编程吧。回过头看,这个问题会显得很愚蠢 ;) - aaronasterling
2
尽情使用吧(虽然你需要自己找出错误):http://pypi.python.org/pypi?:action=browse&c=3&c=8 - msw
1
其实,即使现在也是愚蠢的。不要学习“有缺陷的代码”或调试器。继续编写优秀的代码。 - S.Lott
@S.Lott,有时候需要调试其他人的代码。这就是我学习最多关于调试的时候。 - John La Rooy
@gnibbler: 可能吧。但是@vlad003可以等到那时再学习调试。现在,编写无bug的代码比任何其他技能都要好。 - S.Lott
3个回答

6

不确定如何有意识地搜寻带有漏洞的源代码,但您可以查看主要Python项目(以及较少使用的项目)的错误跟踪器,查找报告所涉及的错误并进行调试。这是一个双赢的局面。您可以获得调试技能,他们(希望如此)可以获得修补程序来解决错误 :-)


0

这是一个不错的例子,看看有没有 bug ;)

只是一些代码,几年前曾经让我遇到过问题。

methods = []                       
for i in range(10):                        
    methods.append(lambda x: x + i)        

print methods[0](10)                       

啊,这有点棘手。我自己也遇到了太多类似的问题,而且我似乎从这个特定的错误中学不到什么。 :) 提示:由于OP是编程新手,请阅读有关闭包/作用域的内容。 - bcat
有点超出我的理解范围 :P。但我从未知道你可以这样使用 lambda。我只是非常有限地使用它。但我看到每个 method[n](10) 的每个数字都给出了19... 没有头绪。 - avacariu
1
问题在于i不是lambda的本地变量。因此,它从父范围获取i,这将是range(10)返回的最后一个数字。学习作用域如何工作是一个重要的课程。解决这个问题的一种方法是这样做:methods.append((lambda y: (lambda x: x + y))(i))。这样,您可以将该值添加到包装lambda函数的本地范围中。 - Wolph
2
一个更简单的解决方法是 lambda x, i=i: x+i。参数 i 将被初始化为循环中当前的 i 值。 - Dave Kirby
1
@Dave Kirby。这也是一个不错的解决方案。唯一的问题是你改变了函数的签名,这可能是一个问题或者不是一个问题,具体情况而定。 - Wolph

0

调试的工作70%是在从异常报告中找出错误并弄清楚它,然后才能采取行动,而30%则是在修复错误时如何避免让整个程序崩溃。

如果你只是被告知代码有问题,或者只是被给予有缺陷的代码,那么你的处境比起一开始就更糟糕了。

我认为劳伦斯的评论非常准确,在一个有现实约束和足够代码库的项目中,去寻找已经被跟踪和记录下来的问题,并且有可重复的步骤,这将是一个很好的练习。当你需要解决一个陌生的代码库时,这也可以作为学习阅读的好机会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接