V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
restran
V2EX  ›  Python

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

  •  
  •   restran ·
    restran · 2015-12-21 09:39:05 +08:00 · 3125 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为 Python 是动态类型的,有些错误经常是在执行的时候才发现,比如在调用一个对象的属性时,不小心拼错了属性名。这种低级错误,犯过好几次。

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

    所以,不能依赖编译差错,而应该从测试、开发过程比如 TDD 来减少错误。
    restran
        19
    restran  
    OP
       2015-12-21 16:07:52 +08:00
    @BOYPT 赞同
    siteshen
        20
    siteshen  
       2015-12-21 16:13:29 +08:00   ❤️ 1
    拼写正确+自动补全+代码写完最少跑一遍检查结果。
    aisk
        21
    aisk  
       2015-12-21 16:33:20 +08:00   ❤️ 1
    藏的深的 lint 工具照样也能检查出来,除非你滥用 dict 了。
    flowfire
        22
    flowfire  
       2015-12-21 16:54:40 +08:00   ❤️ 1
    define defien define
    define flase false
    define ture true
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.