人在旅途 发表于 2006/5/11 15:16:15 | 不知不觉中编程已经有十年了,现在对我来说编程早已不是那种忐忑不安,走一步测一步再改一步的状态了,虽然编程对我来说仍然有很大的诱惑力,使我对它的兴趣不减当年.这固然有开发语言和工具不断完善的原因,也有我的经验不断积累的原因.但还有个地方使我吃不大准,有时候我觉得已经搞定它,但过了一段时间发现还是弄乱了.它就是错误处理,尽管它的技术已经从最初的"保存寄存器或全局变量"到"返回CODE"再到"EXCEPTION",你会发现最新的技术并不是在任何地方都是最好的,"返回CODE"仍然被普遍使用,"保存全局变量"有时也会不得已而为之.所以小结一下也许有好处. 错误处理首先要搞清楚的不是编程上的方法,而是错误的分类和错误的对应方法.错误的类型可分为两类,程序错误和应用错误.程序错误是你程序内部错误,是种编程错误,换句话说是不应该发生的事.虽然是不应该发生的,但的确是不可避免的.因为再有经验的程序员也肯定会有昏头或三心两意的时候;再严谨的测试也会有漏洞;任何程序只要被使用就需要维护修改,即使自己修改自己的程序,随着时间的推移也会改得越来越糟;定得再好的接口,不同的人或者不同时间去看,都有理解上的偏差. 第二类错误是应用错误,可能是用户输入了不该输入的数据,在不该使用的时候使用了,数据库被非正常修改了...编程的人并不能预知所有的使用情况. 根据以上两种类型的错误就有不同的对应方法了.对于第一类错误,首先你要知道你对应的主要目的不是去挽救它,纠正它,而是去定位它,使你的程序修改比较容易.所以好的对应方法应该是记录错误的详细情报,然后退出这一模块甚至是整个程序.要记住记录错误是给程序员自己看的,而不是给用户看的,用户只要知道他应该打电话了就可以了,不要期望用户看了错误记录就可以采取修改措施,那是不应该的也是基本不可能的. 第二类错误的对应方法有一个原则,尽量让你的程序在这种情况下不崩溃,能够继续运行.比如用户的输入错误,就要给用户重新输入正确数据或者取消当前操作的机会;数据库有错,要让用户有机会尝试从备份中恢复数据;所以你要尽量做到两点,一是给出用户可以理解的错误信息,并指导他改正(用户可以去查手册,而不是不知所措地打电话);二是程序不能崩溃,因为此类错误是应该被程序员预先考虑到的,所以真的发生也不奇怪,奇怪的是系统崩溃引起恐慌和可以避免的损失.打个比方说,如果我在银行只有100块存款,我却去取200块,如果因此而发生整个银行系统停机,股市关门,你说应该吗?虽然正确对应这种错误是程序员的责任,但仍然是可以做得更好但永远不能做得最好的事,因为程序员是人,他总有想不到和疏忽的地方.千年虫就是一个例子,因为当初开发电脑的人从没考虑到到了2000年他的电脑和程序仍然可能在运行.所以整个世界花了几千亿美金来修改这一错误,注意是有程序员而不是用户来修改的.
|