`
glutinit
  • 浏览: 47309 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

代码大全读后杂记-04 错误处理技术

阅读更多
【题外话】 今天下午在公司犯困打盹的间隔,看到了同学开的公司现在已经红红火火,难免有些惆怅,虽然我知道不应太在意外在的物质,但对个人价值的体现或梦想的追逐与实现还是非常佩服的。虽然我大概走不出一条所谓创业的路,但自己的梦想依旧需要在现实中用汗水和努力去赢取,留下此言以示激励,也愿上帝能够加添给我力量,让我勇往直前:)

好吧,继续看书吧先;

在java和C++用,可以用断言等技术来处理不应该发生的错误;但有可能会发生的错误又当如何处理呢?代码大全中列举了如下几点,按照自己的经验来说,我觉得写的挺齐全的了。下面这些处理方法并不是适用于任何场景,需要按照实际需要来决定选择何种方式~

1. 返回中立值
   中立值就是一个没有危害的值,这个要看找你写代码时候具体的场景来决定了,比如说int值就返回0(或者返回-1之类),字符串就返回"",指针操作就返回null等等;
  
2. 换用下一个正确的数据
   在做某个循环操作的时候,在中间某个环节发生了错误,那么就继续运行下去,直到得到下一个正确的答案为止,比如每秒以100次的速度读取温度计的数据,如果有一次发生了错误,那么就尝试1/100秒后读下次的数据并返回;这个方法也只是适用于某种场景;

3. 返回与前一次相同的数据
   比如在绘制图案时,在绘制某个区域时读取颜色数据错误,那么就选择用最近一次的颜色来绘制之,因为,理论来说,绘制的图案区域应该是彼此相连的

4. 换用最接近的合法值
   比如某个测试仪只能测定某个范围内的速度,比如0~100,如果你观测的物体速度大于100了,那么就返回最大值100。(如果经常发生超越100的观测物体,就需要修改程序来调整测速范围了)

5.把警告信息记录到日志中去
   这个方法可以和其他的错误处理技术合用,保留下足够的日志信息可以让你更准确的定位错误发生的原因,这在商业软件中是比较常用的。客户肯定不喜欢你卖给他的软件跑出了你自己都说不清楚的错误...  

6.返回一个错误码
   使用这个方法的前提是,调用此模块的某个子程序了解你返回错误码所代表的意思,比如你返回-1表示拥护错误,返回-2表示密码错误等。当然,你也可以抛出某些异常。
    可以选择如下几个方法:
    1. 设置一个状态变量的值(使用者可以通过该变量了解该方法的错误原因)
    2. 直接返回一个值表示函数的状态
    3. 利用异常机制抛出异常

7.调用错误处理子程序或对象
   用一个全局或几个专用的子程序或对象来处理所有发生的异常,这个方法的优点就是把所有异常处理的职责都集中在一起,让调试变得更加简单。但这也是缺点,因为这样就造成了程序代码之间的过度耦合。

8. 当错误发生时显示出错信息
   一般在带有界面的程序中用到该方法,让用户可以及时的得到错误的信息。该方法的缺点就是在软件本地化时会遇到挑战。另外,最好不要将所有的错误都告诉用户,一是有些错误原因过分专业,用户不需知道;二是暴漏过多错误原因,也让攻击者有机可乘。

9.用最妥当的方式在局部处理错误
    好吧,作者在这一点想表达的意思我没怎么看懂...

10.关闭程序
    某些极端重要的应用程序中,就需要用这种暴力的方式来处理异常。比如书中提到的一个给病人注射药剂的程序,如果接收到一个错误的放射剂量,最好关闭程序让医生来解决,而不是选择注射最大量等等方法...这可是人命关天啊...

有些方法我也很少用到,以后写代码时可以借鉴一下






  
 

分享到:
评论

相关推荐

    工作杂记-YUV的dump和read

    工作杂记-YUV的dump和read

    Vue开发资源:vue相关的开发杂记-前端开发

    - **虚拟DOM**:Vue通过虚拟DOM技术实现了高效的数据更新和页面渲染,减少了对实际DOM的操作,提升了性能。 - **数据绑定**:Vue采用双向数据绑定,使得视图和模型之间的数据自动同步,简化了开发过程。 - **指令...

    网络问题:收集平时遇到的问题

    作者:hazer,时间:2019-6-28杂记-47-杂记-46-杂记-45-杂记-44-杂记-35- 内置简介:github readme自动生成工具作者:hazer,时间:2019-6-27杂记-33-杂记-32-杂记-31-杂记-30-杂记-29- 杂记-28- 杂记-27-杂记-26-...

    mynane#web-problem#杂记-18.获取运行环境1

    // 获取userAgent// 是否是ie// 是否是IE9// 是否是edge浏览器// 是否是android浏览器// 是否是ios// 是否是谷歌浏览器

    mynane#web-problem#杂记-45.Golang 在 Mac、Linux、Windows 下如何交叉编译1

    Mac 下编译 Linux 和 Windows 64位可执行程序Linux 下编译 Mac 和 Windows 64位可执行程序Windows 下编译 Mac

    计算机杂记

    - **定义**:数字信号处理是一种技术,用于通过数学算法处理和分析数字信号。 - **应用场景**: - 音频处理:如音乐合成、语音识别等。 - 图像处理:如图像压缩、增强等。 - 通信系统:如调制解调技术。 - **特点...

    fortran90读书杂记

    它在FORTRAN 77的基础上引入了许多增强功能,提高了代码的可读性、可维护性和可重用性。以下是一些关键知识点的总结: 1. 数据类型: - INTEGER(KIND=1,2,4) 分别占用1、2和4个字节,缺省为4字节。单精度浮点数的...

    oracle 9i杂记

    异常处理部分允许我们捕获并处理运行时错误,增强程序的健壮性。例如: ```sql BEGIN -- 可能抛出异常的操作 EXCEPTION WHEN OTHERS THEN -- 处理异常 END; ``` Oracle 9i的PL/SQL支持块结构,可以创建嵌套的PL...

    编程学习杂记-序

    序: 编程10年了,感觉有些空虚。不敢称大牛,只能说是一个老鸟。有时候查资料也感觉比较麻烦。想想如果自己能写一些东西,然后查找起来应该会很快,这样对自己也是一个帮助,也希望能帮助到其他人。...

    oracle杂记.doc

    oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。

    单片机C语言学习杂记

    在电子技术领域,单片机是一种集成了微处理器、存储器以及多种输入输出接口的微型计算机系统。51单片机是基于MCS-51架构的一种广泛使用的单片机型。由于其成本低廉、性能稳定且易于学习等特点,51单片机成为了很多...

    大数据云计算技术 Hadoop的相关技术与应用案例分享 全套PPT 共9套PPT课件.rar

    大数据云计算技术 Hadoop运维杂记(共21页).pptx 大数据云计算技术 暴风集团基于hadoop的数据平台总体架构简介(共18页).ppt 大数据云计算技术 淘宝网Hadoop与数据分析 taobao数据团队(共30页).ppt 大数据云计算...

    第14章 Pythonic与Python杂记.mp4

    第14章 Pythonic与Python杂记.mp4

    李特伍德 一个数学家的杂记.pdf

    李特伍德的《一个数学家的杂记》是一本收录了作者关于数学、教育以及个人观点文章的集合。这本杂记以数学为主题,涉及的内容包括几何、概率论、数论以及历史上的数学发现等。李特伍德在书中讨论了数学知识与日常生活...

    JBoss配置杂记

    ### JBoss配置杂记知识点详解 #### 一、配置JBoss以80端口服务 在JBoss配置中,若想让JBoss监听在标准的HTTP端口80上,而不是默认的8080,需要对配置文件进行相应的修改。具体步骤如下: 1. **定位配置文件**:...

    大数据云计算技术 Hadoop运维杂记(共21页).rar

    标题中的“大数据云计算技术 Hadoop运维杂记”表明这是一份关于Hadoop在大数据云计算环境下的运维实践文档。Hadoop是Apache基金会开发的一个开源框架,主要用于处理和存储大规模数据,尤其适合于处理非结构化和半...

    InstallshieldX安装制作杂记(实例之自定义对话框)

    3. 错误处理:为可能出现的错误情况编写适当的错误处理代码,确保即使在异常情况下也能给用户提供清晰的反馈。 综上所述,通过InstallshieldX的自定义对话框功能,开发者可以极大地提升安装程序的用户体验。熟练...

    51单片机P89V51学习杂记.rar

    《51单片机P89V51学习杂记》是针对电子工程初学者以及对51单片机有兴趣的开发者提供的一份宝贵资源。这份压缩包包含了关于51单片机及其应用的深入学习材料,特别是侧重于P89V51型号的单片机。下面将对其中的主要知识...

    InstallshieldX安装制作杂记

    《InstallshieldX安装制作杂记——自定义对话框的实现》 在软件开发过程中,安装程序的制作是一项不可或缺的工作。InstallshieldX作为一款强大的安装包制作工具,提供了丰富的功能,其中包括自定义对话框的创建,这...

    PD杂记体育ii已同居ikyht

    【数据库设计基础与PowerDesigner应用】 数据库设计是IT领域中至关重要的部分,它涉及概念设计、逻辑设计和物理设计等多个阶段。在概念设计阶段,我们主要关注实体、属性和联系集,这些都是构建数据库模型的基础...

Global site tag (gtag.js) - Google Analytics