我不确定我是否喜欢Python的动态性.它经常导致我忘记检查类型,尝试调用属性并获取NoneType(或任何其他)没有属性x错误.其中很多是非常无害的,但如果处理不当,他们可以关闭整个应用程序/进程/等.
随着时间的推移,我会更好地预测这些可以弹出的位置并添加显式类型检查,但因为我只是人类,我偶尔会错过一个,然后一些最终用户找到它.
所以我对你避免这些的策略感兴趣.你使用类型检查装饰器吗?也许特殊的对象包装?
请分享...
忘记检查一个类型
这没有多大意义.你很少需要"检查"一种类型.你只需运行单元测试,如果你提供了错误的类型对象,事情就会失败.根据我的经验,你永远不需要"检查".
尝试调用属性并获取NoneType(或任何其他)没有属性x错误.
出乎意料的None是一个普通的bug.80%的时间,我省略了return.单元测试总是揭示这些.
在那些仍然存在的,80%的时间里,None由于有人写了一份不完整的return陈述,因为"提前退出"而返回,这些都是普通的老错误.if foo: return通过单元测试可以轻松检测这些结构.在某些情况下,它们应该是if foo: return somethingMeaningful,而在其他情况下,它们应该是if foo: raise Exception("Foo").
其余的是误读API的愚蠢错误.通常,mutator函数不返回任何内容.有时候我会忘记.单元测试可以快速找到这些,因为基本上没有任何方法可行
这完全涵盖了"意外None"案件.易于单元测试.大多数错误涉及对一些非常明显的错误种类进行相当简单的写入测试:错误的回报; 没有提出异常.
其他"没有属性X"的错误实际上是错误的,其中使用了完全错误的类型.这要么是错误的赋值语句,要么是错误的函数(或方法)调用.它们在单元测试期间总是精心失败,需要很少的修复工作.
其中很多是非常无害的,但如果处理不当,他们可以关闭整个应用程序/进程/等.
嗯...无害?如果它是一个错误,我祈祷它尽快降低我的整个应用程序,所以我可以找到它.一个不会崩溃我的应用程序的错误是可以想象的最可怕的情况."无害"不是我用于一个未能使我的应用程序崩溃的错误的词.
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |