异常处理

没有不出错的软件

       从不出错的软件从某种程度上讲是不可能的!

 

    和普通人的观念相反,创造可信赖的,健壮的软件并不是一件不可能的事情。大部分的商业软件,在长时间可以无重大故障的工作,但它们并非没有任何的错误,只是拥有低出错率,你可以迅速理解出错原因然后快速搞定它,并且,它不会因为外部错误而毁坏数据。软件中有错误是可以原谅的,甚至是可以预料到的;不可原谅的是您无法解决一个复发的错误,仅仅是因为您没用足够的信息。

 

       另外,如果希望成功避免发生错误,就必须要求开发人员正确对待错误。

做好最坏的打算

    所有代码的书写,你应该认为,它是会发生错误的。如果太过于相信自己,往往会导致错误没有被处理,因此也就无法或者非常困难得去获得错误的详细信息。

 

不要相信外部数据

外部数据是不可相信的。不管这些数据是来自寄存器、数据库、硬盘、socket、文件或者是键盘,它们都必须被检查,只有这样你才可以去使用它们。

 

唯一可信赖的外部设施是:显示器、鼠标和键盘。

不要理所当然

       举个例子,你打开一个TXT文件并修改后,希望原地保存,因此往往理所当然地认为,能打开即能保存。然而,该文件可能是只读的,又或者所在驱动器只读,甚至磁盘空间不够。如果你理所当然,那程序也就理所当然地出错了。

 

 

合理使用.NET异常处理机制

       当你摆正观念以后,就可以使用.NET完善的异常处理机制,来抒写安全的代码。事实上,并非掌握了try{}catch{}语法后,就能抒写安全的代码。其中非常多需要注意的事项。什么时候try?怎么try?怎么catch,都是可以商酌的。我这里介绍的仅仅是比较好的方法。

不要抛出new Exception()

Exception是一个非常大的类,如果没有side-effect(副作用),很难去捕获。引用你自己的异常类,但是使它继承自AppliationException。通过这种方法,你可以设计一个专门的异常捕获程序去捕获框架抛出的异常,同时设计另一个异常捕获程序来处理自己抛出的异常。

 

每个线程要有单独的catch (Exception ex)语句

在你的应用程序中,普通的异常处理应该被集中解决。每个线程需要一个单独的try/catch模块,否则,你将会丢失异常导致非常难处理的问题的出现。当一个应用程序启动若干线程去做一些后台处理时,通常你需要创建一个用来存储处理结果的类。不要忘记添加用来存储可能发生的异常的区域,否则在主线程中你将无法与之通信。

要记录Exception的全部信息

在捕获错误以后,应该记录的是Exception.ToString(),而不仅是Exception.MessageException.ToString()将会给你一个堆栈跟踪内部的异常和信息。通常,这个信息是及其珍贵的,如果你仅记录Exception.Message,你将会仅仅获得一些没用的信息。

要有清理代码

不要忽略的一件事是try/finally 模块如何使你的代码变得更加可读与健壮,这是处理代码的巨大作用所在。

 

举个例子,假设你需要从一个临时文件中阅读一些临时信息,然后以字符串的形式返回它。不管发生什么,你都必须删除这一文件。这样的返回处理功能需要try/finally模块来完成。

 

try

{

    string fileContents;

    using (StreamReader sr = new StreamReader(FileName))

    {

        fileContents = sr.ReadToEnd();

    }

    File.Delete(FileName);

    return fileContents;

}

catch (Exception ex)

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值