📄 kj05-01-02.txt
字号:
5.1.2 实现全面容错的途径
1.尽早处理错误
出现错误后允许用户进行的每一步功能性操作,对用户而言都是在浪费时间和精力。
例如,当程序事实上已经不可能接收键盘输入信息后,如果程序给用户的是一个能够正常接收键盘输入信息的假象,则用户将认为一切正常并继续输入。然后,程序告知用户在以前有一个错误,从那时开始是在浪费时间。无疑,用户是很难心平气和地面对这一现实的。
尽早处理错误的要诀是在编码过程中遵循下列规则:
* 预防所有可以预料和防止的错误。
* 处理所有可以预料但不能防止的错误。
* 捕获所有不能预料的的错误。
这样,错误可以被分成两种类型:可以预料的和不可以预料的。
键入无效信息的错误一般是可以预料的,程序可以事先屏蔽无效输入,以防止这种错误的发生。文件读取错误往往是可以预料但不能防止的,潜在的错误(如类型错误、文件损坏等)都可以预料,但一般不能防止。程序需要进行适当的操作,以处理这种错误(对处理文件损坏这一特定的错误而言,程序可以提示用户修复毁坏的文件并重试)。
有些错误是不可预料的,因此,既不能预防也不能处理这些错误。对于此类错误,最好的方法是捕获之。捕获的意思是,首先确保错误不会引发多米诺骨牌效应,然后再通知用户或系统管理员。
(1)预防错误。预防错误是容错代码中的重要环节。尽可能地预防错误,可以避免许多用于错误处理和捕获的工作,使容错代码迅速“瘦身”;此外,“防患于未然”是用户最乐意接受的形式。
(2)处理错误。就代码规模而言,处理错误的代码是容错代码中的主要组成部分。
需要指出的是,处理错误意味着,当错误发生后,容错代码将智能性地按照某种逻辑对错误进行纠正,而不是简单地将控制引向错误发生前的位置。
(3)捕获错误。捕获错误是容错代码中的常见形式。不可预料错误可能引起系统崩溃,或造成某种灾难性的后果。而捕获错误是避免出现上述后果的唯一手段。因为错误捕获的对象是不可预料的错误,所以错误捕获代码不能对错误进行纠正,而只能恢复到某种状态。
在实践中,错误捕获常常被过分强调和滥用。事实上,对用户而言,捕获到错误的信息通常会让他们产生挫折感。
这里,笔者并不是贬低错误捕获的必要性和重要性,捕获错误是处理不可预料错误的唯一途径。但是,如果用捕获错误的方法来处理可以防止或处理的错误,就是滥用错误捕获。
随着错误预防和错误处理机制的完善,捕获错误的工作量将减少(从理论上讲,不存在不可预料的错误,只存在由于学识方面的原因而不能预料的错误)。
2.随时编写错误处理代码
推迟处理错误往往会引发许多严重的后果。为程序“打补丁”时,程序员可能已经忘记了错误发生的原因和处理方法等方面的细节。更坏的情况是,当一个程序员为另一个程序员编写的程序“打补丁”时,还可能引入更多的错误。
当用户由于程序错误而请求支持时,会怀疑程序的健壮性,这无疑会影响开发者的形象和进一步合作的前景。
因此,在编写每一行功能性代码时,必须考虑是否需要容错以及如何容错。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -