使用Python,我可以轻松地获得异常的名称,如下所示 .
-
运行代码,即x = 3/0以从python获取异常
-
"ZeroDivisionError: integer division or modulo by zero"告诉我这是ZeroDivisionError
-
修改代码,即尝试:x = 3/0除了ZeroDivisionError:做点什么
有没有类似的方法用C找到异常名称?
当我运行x = 3/0时,编译后的二进制文件只会抛出“浮点异常”,与python相比,它没那么有用 .
4 回答
虽然您不能轻易询问异常的名称,但如果异常派生自
std::exception
,您可以找到what()
显示的指定原因:除此之外,除以0并不能保证引发C异常(我认为MS平台可能会这样做,但你不会在Linux上得到它) .
如果您想知道异常类的名称,可以使用RTTI . 但是,绝大多数C代码都会抛出从std :: exception派生的异常 .
但是,你得到的只是std :: exception :: what中包含的异常数据,你可以从RTTI获取异常类的名称,并在需要更多信息时明确捕获它(并且它包含更多信息) .
对于大多数例外,如果您在编译器中设置了RTTI选项,则可以执行以下操作:
不幸的是,除以零抛出的异常并不是从std :: exception派生的,所以这个技巧不起作用 .
如果这是一个调试问题,您可以将编译器设置为在遇到异常时中断,这可能是无限有用的 .