定义错误代码

时间:2011-07-19 12:41:00

标签: exception error-code

是否有“正确的方法”来定义错误代码?我的意思是,我刚刚建立了一个库,它会抛出自定义异常,但我将自定义错误消息定位到开发人员的立场。现在我正在结束GUI,当我捕获这些异常时,我需要更多用户友好的消息。这本身不是问题,但是我要说,我有我的ReceiverNotAvailableException异常和NoMessageReceivedException。对我来说,作为开发人员,他们的意思是完全不同的东西,并且有不同的内在消息,但对于最终用户,他们只是意味着“用户没有找到”。我希望显示类似“未找到用户(错误X)”的内容,其中X根据引发的异常而变化 - 如果您问我,这很常见。

我的问题是:我应该使用X = 1,2等等,具体取决于什么样的例外情况,还是应该选择更复杂的东西?我知道这听起来像一个愚蠢的问题,但我真的很想知道在这种情况下“最佳实践”(我不太喜欢这个术语)是什么。

顺便说一句,我当然有一个表将每个代码映射到相应的异常,无论哪种情况。

1 个答案:

答案 0 :(得分:3)

如果您的异常不能重叠,那么使用HashTable [ExceptionName] =“错误消息”看起来就像一个理智的选项。如果可以,您可以使用以下内容:

定义可以重叠的消息代码的标准方法(这是同时发生的)是使用2的幂:

define ERROR_SYSTEM_DOWN  1
define ERROR_DATABASE_UNREACHABLE 2
define ERROR_SPACE_UNAVAILABLE 4
define ERROR_DISK_DIED 8

等等。然后,在代码中你可以做

if (disk_died() && no_space()) {
    int errorCode = ERROR_DISK_DIED | ERROR_SPACE_UNAVAIABLE; //Binary or
    return errorCode;
}

最后,在接收端你可以:

if (errorCode & ERROR_DISK_DIED == ERROR_DISK_DIED) { //Binary and
    //then, at least, disk died. You can check for the rest in the same way
}

说明:

ERROR_SYSTEM_DOWN = 0001
ERROR_DATABASE_UNREACHABLE = 0010
ERROR_SPACE_UNAVAILABLE = 0100
ERROR_DISK_DIED = 1000

然后

1000 | 0100 = 1100

和,在检查代码上

1100 & 0100 = 0100

现在,如果您正在使用异常,则可以使用相同的方法,只要发生异常就冒泡错误代码。虽然这个习语在C中比较常见。