0

我使用try/catchandthrow来处理异常。所以我使用try/catch的是捕获错误,其中包括文件不可用等问题,然后throwtext包含错误值时使用。

my的基本布局Main()如下:

   while ((line = sr.ReadLine()) != null)
        {
            try
            {
                //get the input from readLine and saving it

                if (!valuesAreValid)
                {
                    //this doesnt make the code stop running
                    throw new Exception("This value is not wrong"); 

                 } else{
                 //write to file
                 }
            }
            catch (IndexOutOfRangeException)
            {
               //trying to throw the exception here but the code stops

            }

            catch (Exception e)
            {

               //trying to throw the exception here but the code stops 


            }

因此,如果您注意到我在内部 try/catch抛出异常并且不会停止程序,而当尝试Exception在 catch 语句中抛出时,代码会停止。有谁知道如何解决这个问题?

4

4 回答 4

3

如果你在 a 中抛出异常catch,它不会被它处理catch。如果没有catch更进一步,你会得到一个未处理的异常。

try {
    try {
        throw new Exception("example");
    } catch {
        throw new Exception("caught example, threw new exception");
    }
} catch {
    throw new Exception("caught second exception, throwing third!");
    // the above exception is unhandled, because there's no more catch statements
}
于 2013-09-27T04:08:36.483 回答
2

默认情况下,除非您在 catch 块中重新抛出异常,否则异常将停止在捕获它的“catch”块处向上传播。这意味着,程序不会退出。

如果您不想捕获异常,并希望程序退出,您有两个选择: - 删除“异常”的 catch 块 - 在它的 catch 块内重新抛出异常。

catch (Exception e)
{
   throw e; // rethrow the exception, else it will stop propogating at this point
}

一般来说,除非您对异常有一些合乎逻辑的响应,否则请完全避免捕获它。这样你就不会“隐藏”或抑制应该导致程序出错的错误。

此外,MSDN 文档是了解异常处理的好地方:http: //msdn.microsoft.com/en-us/library/vstudio/ms229005%28v=vs.100%29.aspx

于 2013-09-27T04:13:16.457 回答
0
while ((line = sr.ReadLine()) != null)
        {
            try
            {
                //get the input from readLine and saving it

                if (!valuesAreValid)
                {
                    //this doesnt make the code stop running
                    throw new Exception("This value is not wrong"); 

                 } else{
                 //write to file
                 }
            }
            catch (IndexOutOfRangeException)
            {
               //trying to throw the exception here but the code stops

            }

            catch (Exception e)
            {

               //trying to throw the exception here but the code stops 
             throw e; 

            }
于 2013-09-27T04:05:49.267 回答
0

我不确定您所说的“停止程序”是什么意思。如果您不处理异常,程序将停止,但您的代码正在处理您通过 catch (Exception e) 块抛出的异常。或者你的意思是你想退出 while 循环,在这种情况下你可以使用break

于 2013-09-27T04:06:57.503 回答