代码之家  ›  专栏  ›  技术社区  ›  GurdeepS

我如何区分真正的特殊情况和常规的坏情况?

  •  1
  • GurdeepS  · 技术社区  · 16 年前

    很多开发人员说,只有在真正特殊的情况下才会抛出异常。其中之一是,如果要写入的外部硬盘驱动器没有打开(因此不是已连接/已注册的驱动器)。然而,有些情况很难确定它们是否真的是例外。

    例如,输入文件夹路径的字符串,但找不到该字符串。在这种情况下,如果有任何无法找到的输入(如集合中找不到的名称),是否最好只返回一条错误消息和一些操作?

    例如。

    public void Find(string name)
    {
        if(Names.contains(name)
        {
            string s = Names.get(name);
        }
    
        if(!Names.contains(string name)
        {
            throw new ???Exception;
        }
    }
    

    或者做一些像显示弹出窗口和优雅地处理情况的事情?

    在else或if语句中抛出异常是否明智?查看一个关于异常处理的代码清单会给我带来很多好处。

    3 回复  |  直到 13 年前
        1
  •  1
  •   xtophyr    16 年前

    一般来说,它的工作原理如下:

    如果你能在不受任何干扰的情况下处理这种情况,那么就这样做。(文件不存在,但其输入对于继续操作不重要[首选项、可选配置等])

    如果您需要用户干预,请询问他们。(文件不存在,但需要继续操作)

    如果是用户无法修复的问题(内存不足、硬件故障等),则抛出异常。

    每个地方的细节都有自己的标准,但我发现上面的工作大体上是可行的。

        2
  •  1
  •   Steven A. Lowe    16 年前
    1. 如果代码可以从异常中恢复,请执行此操作
    2. 如果可以接受要求客户检查返回值是否有小的预期异常,请这样做-这是一个判断调用,请参见下面
    3. 在所有其他情况下,引发异常(或不捕获被调用方法的异常)

    对于第二种情况,minor和expected是高度上下文敏感的

    imho不会对控制流使用异常,但在所有其他情况下,您可能更安全地抛出它们

    请注意,一些“优化”建议告诉您检查条件而不是依赖异常,例如,找不到文件,但实际上,您仍然应该期望异常,因为文件可能会在检查是否存在的语句和试图打开文件的语句之间被删除或移动!

    总结:一般来说,抛出异常是最安全的过程。当然,直接警告或要求用户应该 只有 在用户界面代码中完成!

        3
  •  0
  •   BCS    16 年前

    如果可以对它做些什么,但是检测它的代码不知道该做什么,那么应该使用异常。