我使用try/catch
和throw
来处理异常。所以我使用try/catch
使用捕获错误,其中包括文件不可用等问题,然后在throw
包含错误值时使用text
。
我的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语句时,代码会停止。有没有人知道如何解决这个问题?
答案 0 :(得分:3)
如果您在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
}
答案 1 :(得分: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
答案 2 :(得分: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;
}
答案 3 :(得分:0)
我不确定你的意思是“停止程序”。如果您不处理异常,程序将停止,但您的代码正在处理通过catch(异常e)块抛出的异常。 或者你的意思是你想要退出while循环,在这种情况下你可以使用 break 。