【问题标题】:Defining error codes定义错误代码
【发布时间】:2011-10-08 12:06:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: exception error-code


    【解决方案1】:

    如果您的异常不能重叠,那么使用 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2020-05-18
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多