0

是否有定义错误代码的“正确方法”?我的意思是,我前段时间构建了一个引发自定义异常的库,但我将自定义错误消息定位到了开发人员的角度。现在我正在整理 GUI,当我捕捉到这些异常时,我需要更多用户友好的消息。这本身不是问题,但假设我有我的 ReceiverNotAvailableException 异常和 NoMessageReceivedException。对我来说,作为开发人员,它们意味着完全不同的东西并且有不同的内在信息,但对最终用户来说,它们只是意味着“找不到用户”。我想显示类似“找不到用户(错误 X)”的内容,其中 X 取决于引发的异常 - 如果您问我,这很常见。

我的问题是:我应该选择 X=1、2 等等,这取决于什么样的异常,或者我应该出于何种原因选择更复杂的东西?我知道这听起来像是一个愚蠢的问题,但我真的很想知道在这种情况下“最佳实践”(我不太喜欢这个词)是什么。

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

4

1 回答 1

3

如果您的异常不能重叠,那么使用 HashTable[ExceptionName] = "Error Message" 看起来是一个明智的选择。如果可以,您可以使用以下内容:

定义可以重叠(即同时发生)的消息代码的标准方法是使用 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

现在,如果您使用异常,则可以使用相同的方法,只要发生异常,就会冒泡 errorCode。虽然这个成语在 C 中更常见。

于 2011-07-19T12:44:06.597 回答