在调用某函数时,如果使用了try catch语句捕获该函数产生的异常,而如果这个函数内调用了其它函数,其它函数又掉了另外的函数,如果这些被调用的函数中任意一个抛出了异常,而异常所在的代码块没有异常捕获的操作,于是这个异常会被最外层的try catch语句捕获,而此时产生的异常已经远远超出了你最开始的预期,当它输出了你指定的错误提示后,你回来查找错误却发现难以找到该异常是哪段代码抛出的。比如以下代码
class Program
{
static void Main(string[] args)
{
try { Fun_1(); }
catch { Console.WriteLine("出错了???"); }
Console.ReadKey();
}
static void Fun_1()
{
Fun_2();
}
static void Fun_2()
{
Fun_3();
}
static void Fun_3()
{
Fun_4();
}
static void Fun_4()
{
Fun_5();
}
static void Fun_5()
{
throw new Exception("Fun_5跑出了异常!");
}
所以结论是,如果要使用try catch语句捕获异常,那么要在所有可能抛出异常的时候都要捕获异常,这样才能尽可能的减少寻找BUG的时间!
(2016年9月9日修改:)今天发现可以使用Exception类接受错误信息,比如吧上述代码主函数改成这样
static void Main(string[] args)
{
try { Fun_1(); }
catch (Exception ex){ Console.WriteLine("出错了??? " + ex.Message); }
Console.ReadKey();
}
这样可以得到准确的错误信息,利于更快的找到错误的位置,但是最好还是要尽可能的作出完整的异常捕获逻辑才能在产生异常时,第一时间追踪到异常的代码处。