C# 我可以执行与一个try块对应的多个catch块吗?
假设我有一个包含3条语句的try块,它们都会导致异常。我希望所有3个异常都由它们相关的catch块处理。。可能吗 像这样的--> 是否可以获得以下输出?--> 是否有可能获得以下输出 不会,因为只会引发一个异常。一旦抛出异常,执行就会离开C# 我可以执行与一个try块对应的多个catch块吗?,c#,java,C#,Java,假设我有一个包含3条语句的try块,它们都会导致异常。我希望所有3个异常都由它们相关的catch块处理。。可能吗 像这样的--> 是否可以获得以下输出?--> 是否有可能获得以下输出 不会,因为只会引发一个异常。一旦抛出异常,执行就会离开try块,并且假设存在匹配的catch块,它将继续执行。它不会返回到try块,因此不会出现第二个异常 try { try { throw new Exception("This is an exception."); }
try
块,并且假设存在匹配的catch
块,它将继续执行。它不会返回到try
块,因此不会出现第二个异常
try
{
try
{
throw new Exception("This is an exception.");
}
catch(Exception foo)
{
System.Console.WriteLine(foo.Message);
throw; // rethrows foo for the next handler.
}
}
catch(Exception bar)
{
System.Console.WriteLine("And again: " + bar.Message);
}
有关异常处理的一般课程以及更多详细信息,请参阅。如果要捕获多个异常,必须将代码拆分为多个try/catch块
更好的方法是在不触发异常的情况下验证数据和日志错误。要添加到Jon的答案中,虽然您不会从单个
try
块捕获多个异常,但您可以让多个处理程序处理单个异常
try
{
try
{
throw new Exception("This is an exception.");
}
catch(Exception foo)
{
System.Console.WriteLine(foo.Message);
throw; // rethrows foo for the next handler.
}
}
catch(Exception bar)
{
System.Console.WriteLine("And again: " + bar.Message);
}
这将产生以下输出:
This is an exception.
And again: This is an exception.
这是一个非常糟糕的做法,但您可以做下一步(使用
finally
block解决您的问题):
同时显示所有异常处理是不可能的。每个异常
catch
的目标是对每个exception
类型有不同的处理,否则将它们一起打印是没有意义的
不,
它不会执行所有三条catch语句。TRY块检查错误,然后从TRY块执行。然后将执行适当的捕获。在您的例子中,算术异常位于异常层次结构的顶部。因此,它将执行,然后程序终止
如果在算术异常之前给出,Catch(异常e),则将执行异常捕获。。。更好地阅读上的SystemException层次结构,您认为这样的日志消息会有任何帮助吗?
This is an exception.
And again: This is an exception.
private static void Main()
{
int[] c={1};
String s="this is a false integer";
try
{
int z = 0;
int x = 5/z;
}
catch (ArithmeticException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
finally
{
try
{
c[10] = 12;
}
catch(IndexOutOfRangeException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
finally
{
try
{
int y = int.Parse(s);
}
catch (FormatException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
}
Console.ReadKey();
}
}