6

可能重复:
执行多个 catch 块

一个try语句可以执行多个catch块吗?我们如何处理catch块?我们可以创建没有catch块的try吗?

4

8 回答 8

18

可以有多个 catch 块(如其他答案中所述),但只执行第一个匹配异常类型的块。这意味着您需要正确订购 catch 块。例如:

try
{
}
catch (Exception exp1)
{
    // Block 1
}
catch (IOException exp2)
{
    // Block 2
}

块 2 永远不会被执行,因为块 1 捕获每个异常(所有异常类都派生自Exception)。

try
{
}
catch (IOException exp1)
{
    // Block 1
}

catch (Exception exp2)
{
    // Block 2
}

IOException在此示例中,仅当异常不是 a或派生自时,才会执行块 2 IOException。如果IOException抛出 an,则只有块 1 会执行,块 2 不会。

于 2012-09-25T13:46:56.490 回答
4
  • 您可以有多个与 try 块关联的 catch 块,但只有一个 catch 块可以处理您的异常。
  • 是的,你可以有一个没有 catch 的 try 块,但必须有一个 finally 块
于 2012-09-25T12:59:43.837 回答
1

从技术上讲,您只能击中一次,但您说:

可以为单个 try 语句执行多个 catch 块吗

正在执行的关键字。所以,你可以试试:

catch (Exception ex)            
{                
    if (ex is MyException1||
        ex is MyException2)
    {
       //do stuff
    }
    else
    {
       throw;
    }
}
于 2012-09-25T13:03:01.440 回答
0

只有一个catch块将执行,它将与抛出catch的类型密切匹配。Exception你不能靠它try自己。你需要一个try catch (one or more catch block)或一个try finally或一个try catch finally

于 2012-09-25T13:01:38.550 回答
0

1 是it's possible to have multiple catch的,一个特定异常的一个捕获

样本

try
{
    ...
}
catch (FormatException)
{
    ....
}
catch (OverflowException)
{
    ...
}

2 你可以有try指令没有catch

try
{
 ...
}
Finally
{
  .....
}
于 2012-09-25T13:00:36.760 回答
0

至于你问题的第二部分,你可以做

try
{
    stuff...
}
catch(Exception ex){}

或者

try
{
    stuff...
}
finally{}

,但你不能自己尝试。

于 2012-09-25T13:01:17.003 回答
0

是的,您可以使用 try 语句拥有多个 catch 块。您从捕获特定异常开始,然后在最后一个块中您可能会捕获 base Exception。只有一个 catch 块将处理您的异常。

您可以在没有 catch 块的情况下使用 try 块。尝试/最终会做。

        try
        {
            Console.Write("test");
        }
        catch (IOException ex)
        {
        }
        catch (ArithmeticException ex)
        {
        }
        catch (Exception ex)
        {
        }

试一试

        try
        {
        }
        finally
        {
        }
于 2012-09-25T13:00:33.037 回答
0

catch单个 try..catch 语句可以有任意数量的块。

但请记住一件事,你的

catch (Exception ex)
{
    ...
}

应该是最后一个 catch 块,因为所有异常都继承了 Exception 类。

于 2012-09-25T13:10:57.400 回答