开个帖子,专门写( Python )bug 代码。仅供娱 mai 乐 lei(参考);应该会不定期更新在评论区

2020-09-22 22:28:58 +08:00
 oahebky

rt.


写 bug 操练 👇

写 bug 1 -- 概率性抛出异常类无属性异常:

from random import randint

class Baba:
    def __init__(self):
        self.sex = 'male'

    def __getattribute__(self):  # ''.join(reversed('ereh gub'))
        if randint(0, 1000) % 67 != 0:
            return object.__getattribute__(self, attr)
        raise AttributeError(f"{type(self).__name__} has no attribute: '{attr}'")

写 bug 2 -- build-in function:

思路:

暂时想不到一个“短路运算”的好例子;有缘再更。

str 用在捕获异常,调用 str(e) 也是个不错的例子;有缘再更。


写 bug 3 -- 默认参数+全局变量

def func(param1, default_param=[]):
    pass

想到好例子再更;


======

感觉还是用 C 语言写 bug 好写一些;

弄个野指针,bug 可以出现地纯洁的像一朵白莲花。

======

抛砖引玉;有没有什么诡异的 Python bug 代码拿出来晒晒?

1354 次点击
所在节点    Python
5 条回复
N1ckl32
2020-09-23 00:17:22 +08:00
追更
no1xsyzy
2020-09-23 04:03:47 +08:00
就 bug 1 来说,你没用 super()
这在多继承的情况下会发生 bug
比如接下来
. class Mama:
. def __getattribute__(self, attr):
. return object.__getattribute__(self, attr)
. class Erzi(Mama, Baba):
. pass
你这个 Baba 就没用咯。
no1xsyzy
2020-09-23 04:04:46 +08:00
@no1xsyzy 啊 . 不能保持空格,改改
class Mama:
....def __getattribute__(self, attr):
........return object.__getattribute__(self, attr)
class Erzi(Mama, Baba):
....pass
oahebky
2020-09-23 18:50:10 +08:00
@no1xsyzy

有道理。写的时候「大脑没有其它空间」考虑这个问题。
oahebky
2020-09-23 18:52:48 +08:00
## 写 bug 4 - str 的可迭代特性;没有 ensure

具体代码就先不写了,因为「偶尔发生」+「合理」的例子不容易想;


信息都在这个 bug 4 标题里面了。

具体例子有缘再更新。

------

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX