如何知道C ++中的异常名称?

时间:2010-06-24 21:15:27

标签: c++ python exception-handling

使用Python,我可以轻松地获得异常的名称,如下所示。

  1. 运行代码,即x = 3/0以从python
  2. 获取异常
  3. “ZeroDivisionError:整数除法或模数为零”告诉我这是ZeroDivisionError
  4. 修改代码,即尝试:x = 3/0除ZeroReivisionError:做点什么
  5. 有没有类似的方法用C ++查找异常名称?

    当我运行x = 3/0时,编译后的二进制文件只会抛出“浮点异常”,与python相比,它没那么有用。

4 个答案:

答案 0 :(得分:4)

虽然您无法轻易询问异常的名称,但如果异常来自std::exception,您可以找到与what()一起显示的指定原因:

try
{
    ...
}
catch (const std::exception &exc)
{
    std::err << exc.what() << std::endl;
}

在旁注中,除以0并不能保证引发C ++异常(我认为MS平台可能会这样做,但你不会在Linux上得到它)。

答案 1 :(得分:1)

如果您想知道异常类的名称,可以使用RTTI。但是,绝大多数C ++代码都会抛出一个从std :: exception派生的异常。

但是,你得到的只是std :: exception :: what中包含的异常数据,你可以从RTTI获取异常类的名称,并在需要更多信息时明确捕获它(并且它包含更多信息)

答案 2 :(得分:1)

对于大多数例外,如果您在编译器中设置了RTTI选项,则可以执行以下操作:

catch(std::exception & e)
{
    cout << typeid(e).name();
}

不幸的是,除以零抛出的异常并不是从std :: exception派生的,所以这个技巧不起作用。

答案 3 :(得分:1)

如果这是一个调试问题,您可以将编译器设置为在遇到异常时中断,这可能是无限有用的。