我过去通常没有使用过异常(我禁用了它们),但是在C++Builder中,有一些东西被配置为使用它。所以我会接受它,但你怎么知道例外是什么,所以你知道你想用它做什么?
返回错误代码或NULL或FALSE的旧方法很容易知道代码,因为它们通常用函数记录代码,但我发现对于异常,方法/命令中实际上没有关于它们的信息。
例如,TFDSQLiteSecurity.SetPassword()
函数,我如何知道任何异常(返回)代码是响应它们?我没看到他们的名单?
我过去通常没有使用过异常(我禁用了它们),但是在C++Builder中,有一些东西被配置为使用它。所以我会接受它,但你怎么知道例外是什么,所以你知道你想用它做什么?
返回错误代码或NULL或FALSE的旧方法很容易知道代码,因为它们通常用函数记录代码,但我发现对于异常,方法/命令中实际上没有关于它们的信息。
例如,TFDSQLiteSecurity.SetPassword()
函数,我如何知道任何异常(返回)代码是响应它们?我没看到他们的名单?
1条答案
按热度按时间hof1towb1#
除非有文档记录,否则知道抛出的异常是什么类型的唯一方法是在运行时实际捕获它并询问它的类型。或者查看库源代码(如果可用)。
关于异常的事情是,你并不总是需要知道它们是什么,只需要知道它们被抛出。
大多数异常都是从公共基类(
Sysutils::Exception
,std::exception
等)派生的,所以通常只通过基类捕获异常就足够了,而不是特定的派生类。只有当您希望以不同于其他异常的方式处理特定异常时,或者当您需要访问特定于异常的详细信息(例如出于日志记录的目的)时,才需要知道异常的特定类型。在任何情况下,在您的特定示例中,所有FireDAC异常都派生自
EFDException
类,该类具有保存FireDAC错误代码的FDCode
属性。特定于DBMS的FireDAC异常是从EFDDBEngineException
派生的,它有几个描述数据库错误的属性,包括ErrorCode
,失败的SQL
及其Params
等。并非所有例外情况都按方法记录。有时错误文档更加集中。例如,有关FireDAC异常的更多详细信息,请参阅Handling Errors (FireDAC)文档。