错误处理规范
错误处理规范、概念澄清概念解释错误是指:导致系统不能按照用户意图工作的一切原因、事件 不是指:java.lang.Error及其子类 异常是指:特定编程语言、开发平台提供的一种错误表现机制 不是指但包括:java.lang.Error及其子类,java.lang.Exception及其子类,System.Exception及其子类 ,std::exception及其子类 一、整体规范
- 按照错误类型,通常的处理方式如下:
- 按照调用类型,通常的处理方式如下:
- 按照展现方式,通常的分类如下:
- 原则
- 异常定义
- 异常捕获
- 异常抛出
- 错误处理与日志系统
- 程序员错误与运行时错误
当你对参数没有任何检查就进行了使用,而非法的参数值导致了错误,此时有两种情况: 如果你在接口函数说明里列出了参数不允许的非法取值,那么客户程序员应该修改程序避免传入非法值,该类错误称为程序员错误;如果你没有说明,那么你应该修改函数,处理非法参数 不是所有的限制条件在文档里说明一下,就可以把责任扔给客户程序员了,有一些错误必须处理:特别是客户程序员不需要import你的package就可以和你的接口交互的情况,如socket服务器 ,你必须在socket服务程序内部检查所有接收到的数据,拒绝错误的请求,否则极易遭到攻击if(xxx == null){
throw new someException();
}
你的代码实际上允许该参数为null,因为你对null的情况进行了运行时处理;尽管你在文档里声明该参数不能为null,但如果客户程序员遵守了约定,那么你这段检查代码就是冗余的
- 错误代码与异常
- Anders Hejlsberg谈C#异常设计
译者注:在写一段程序时,如果没有用try-catch捕捉异常或者显式的抛出异常,而希望程序自动抛出,一些语言的编译器不会允许编译通过,如Java就是这样。这就是Checked Exceptions最基本的意思。该特性的目的是保证程序的安全性和健壮性。Zee&Snakey(MVP)对此有一段很形象的话,可以参见http://www.blogcn.com/user2/zee/main.asp。Bruce Eckel 也有相关的一篇文章:《Does Java need Checked Exceptions》,参见http://www.mindview.net/Etc/Discussions/CheckedExceptions
所以,你可能很重视这些问题,但是在我们决定是否将Checked Exceptions的一些机制放入C#时,却是颇费了一番思量的。当然,知道什么异常可能在程序中抛出还是有相当价值的,有一些工具也可以作这方面的检查。我不认为我们可以建立一套足够严格而严谨的规则(来完成异常检查),因为(异常)还可能是编译器的错误引起的呢。但是我认为可以在(程序)分析工具上下些功夫,检测是否有可疑代码,是否有未捕获的异常,并将这些隐藏的漏洞给你指出来