/ exception

exception

异常处理实际上就相当于大楼失火时(发生异常),烟雾感应器捕获到高于正常密度的烟雾(捕获异常),将自动喷水进行灭火(处理异常)。

try
{
  // 被监控的代码
}
catch(Exception ex)
{
  // 异常处理
  // 发邮件、短信、记录日志
}

上面的方式是用了被动捕获异常,如果需要主动引发一个异常,可以使用 throw new Exception("主动的异常");

Exception (异常)就是一个对象。这个对象的属性可以告诉你异常的有关信息。例如,它有一个 Message 属性,其中包括一个很有用的字符串。

异常就是要帮助我找出并修正代码中未能达到预期的情况。

异常是为了帮助我们发现自己没有考虑到的情况。例如,数据可能并不是我们预期的数据。

用 try 和 catch 处理异常

在 catch 块中,可以做一些事情,而不是让程序戛然而止,例如:打印一条友好的错误消息。

Q1:什么时候需要使用 try 和 catch 呢?

A1:只要是编写有风险,或者可能抛出异常的代码,都应该使用 try 和 catch。关键是明确哪些代码是有风险的,哪些代码是比较安全的。

Q2:既然程序无法提前知道问题,又怎么提供解决问题的建议呢?

A2:这正是 catch 块的作用。只有当 try 块中的代码抛出一个异常时,才会执行 catch 块。你要利用这个机会让用户知道出问题了,并告诉用户这种情况是可以修正的。

异常类

C# 中的异常类

有许多不同类型的异常可以在程序中发生。BCL 定义了许多类,每一个类代表一个指定的异常类型。当一个异常发生时,CTL:

  • 创建该类型的异常对象;
  • 寻找适当的 catch 子句以处理它。

所有异常类都派生自 System.Exception 类。

System.Exception
|-- SystemExcetion 所有预定义系统异常的基类
    |-- IndexOutOfRangeException
    |-- NullReferanceException
    |-- IO.IOExcetption
    |-- ...
|-- ApplicationException 所有非致命的、应用程序定义的异常的基类

Yii2 中的异常

|-- NotFoundHttpException