Exception 定义错误代码

Exception 定义错误代码,exception,error-code,Exception,Error Code,是否有“正确的方法”来定义错误代码?我的意思是,我不久前构建了一个库,它抛出自定义异常,但我将自定义错误消息定位到开发人员的角度。现在我正在包装GUI,当我捕捉到这些异常时,我需要更多用户友好的消息。这本身并不是问题,但我有我的ReceiverNotAvailableException例外和NoMessageReceivedException例外。对我来说,作为一个开发人员,他们的意思完全不同,有着不同的内在信息,但对最终用户来说,他们的意思只是“找不到用户”。我想显示类似“未找到用户(错误X)

是否有“正确的方法”来定义错误代码?我的意思是,我不久前构建了一个库,它抛出自定义异常,但我将自定义错误消息定位到开发人员的角度。现在我正在包装GUI,当我捕捉到这些异常时,我需要更多用户友好的消息。这本身并不是问题,但我有我的ReceiverNotAvailableException例外和NoMessageReceivedException例外。对我来说,作为一个开发人员,他们的意思完全不同,有着不同的内在信息,但对最终用户来说,他们的意思只是“找不到用户”。我想显示类似“未找到用户(错误X)”的内容,其中X根据引发的异常而变化——如果你问我的话,这很常见

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


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

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

定义可能重叠(即同时发生)的消息代码的标准方法是使用两个幂:

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
然后

在检查代码上

1100 & 0100 = 0100

现在,如果您使用的是异常,那么您可以使用相同的方法,只要异常发生,就会弹出错误代码。尽管这个习惯用法在C中更为常见。

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

定义可能重叠(即同时发生)的消息代码的标准方法是使用两个幂:

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
然后

在检查代码上

1100 & 0100 = 0100
现在,如果您使用的是异常,那么您可以使用相同的方法,只要异常发生,就会弹出错误代码。虽然这个习语在C语言中更为常见