Python 如何有效避免对象属性名写错引发的 bug

2015-12-21 09:39:05 +08:00
 restran
因为 Python 是动态类型的,有些错误经常是在执行的时候才发现,比如在调用一个对象的属性时,不小心拼错了属性名。这种低级错误,犯过好几次。

已经有一些 Python 代码的检查工具,比如 Pylint 和 Pyflakes , PyCharm 也已经能很好的检查出一些错误,但是有些藏得深一点的还是会漏过。除了多写测试用例和 Code Review 外,想问大家有什么好的方法来避免这种错误。
3139 次点击
所在节点    Python
22 条回复
lovedboy
2015-12-21 10:54:10 +08:00
这就是动态类型一时爽的后果....233
garfieldWu
2015-12-21 11:01:21 +08:00
定义属性的时候一定要写对单词,再把拼写错误的提示色弄的醒目一点, PyCharm 有拼写检查,这样在写代码的时候一拼错属性名就能检查到。这能「迫使」你写出正确的属性名。
est
2015-12-21 11:02:23 +08:00
写错还好。有的时候自己想了个方法结果把父类的给覆盖了。弄死找不到出错的原因。
windfarer
2015-12-21 11:07:16 +08:00
多测试嘛
restran
2015-12-21 11:34:32 +08:00
@est 这个也很悲剧,另外一个就是相对导入和绝对导入的问题,系统有个包名文件跟项目里的一个文件名一样,结果就导入错误的包了。
restran
2015-12-21 11:35:20 +08:00
@garfieldWu 藏得比较深的 PyCharm 就检查不出来了~
geeklian
2015-12-21 11:36:58 +08:00
@est 集成的问题还可以靠 ide 吧⋯⋯pycharm 是可以的
restran
2015-12-21 11:38:35 +08:00
@windfarer 多测试是没错,毕竟静态类型的语言,可以直接把这种错误扼杀在编译阶段,所以想研究有没有好方法。
BOYPT
2015-12-21 11:43:17 +08:00
这跟静态动态还有关系?
你的 C 语言写 printf("hello wlord")然后不能通过,这时候要怪谁呢
codecrash
2015-12-21 12:10:54 +08:00
自动补全会不会就不出错了
FrankFang128
2015-12-21 12:21:16 +08:00
python :你写错了怪我咯?
est
2015-12-21 12:29:47 +08:00
@restran 之前项目里有个哥们在项目里写了个文件叫 json.py 。。。。
restran
2015-12-21 14:44:48 +08:00
@BOYPT 你可能理解错我想表达的意思了,这种错误,静态语言在编译的时候就过不了,但是 Python 是执行的时候才报错。
restran
2015-12-21 14:45:41 +08:00
@codecrash 问题是有些对象在还没执行的时候,根本不知道是什么类型的对象,所以很难补全。
incompatible
2015-12-21 14:58:49 +08:00
除了多写测试用例和 Code Review 外,还可以改用 Java
mailto1587
2015-12-21 15:09:45 +08:00
用 TDD ,稍微注重下测试覆盖率, AttributeError 很容易暴露
pynix
2015-12-21 15:15:56 +08:00
覆盖。。
BOYPT
2015-12-21 15:38:42 +08:00
@restran 没理解错,但是编译过程并不是用来给你拼写检查的,编译方法名出错充其量算是一个 side effect 。所以我举例,在字符串里面的拼写错误还能怪谁呢?

所以,不能依赖编译差错,而应该从测试、开发过程比如 TDD 来减少错误。
restran
2015-12-21 16:07:52 +08:00
@BOYPT 赞同
siteshen
2015-12-21 16:13:29 +08:00
拼写正确+自动补全+代码写完最少跑一遍检查结果。

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

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

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

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

© 2021 V2EX