首页 > 解决方案 > 处理顶级异常

问题描述

有很多讨论为什么捕获顶级异常是一种不好的做法。但是,有时开发人员并不关心操作是否失败。

例如,有一种方法可以根据文件初始化变量,但变量已经具有有效值。开发人员可能不关心读取失败的原因。

在这种情况下,捕获一般异常可能是有效的(可能是?),除了系统异常(没有内存、io 错误等)。那么这会是一个有效的模式吗?

请注意,示例已根据@stuard 评论进行了更新。

operation()

try
{
    operation_which_can_fail()
}
catch (Exception ex)
{
    if (ex is SystemException)
    {
        throw;
    }
    // Do not care about any other error
    // Do some log maybe
}

next_operation()

什么是预期的解决方案,它不会通过处理所有潜在异常而使开发人员不知所措,但也满足一般错误处理原则(仅捕获您处理的错误)?

标签: c#exception

解决方案


如果用户不关心文件读取结果,那么您应该 catch IOException,而不是用户应该关心Exception吞下错误:

try {
  operation_which_can_fail(); 
}
catch (IOException) {
  // We don't care about files, reading, permissions etc. 
  // Since "...variables already have valid values..." we can ignore the problem
}      
catch (Exception) {
  // Write some log : we have some unexpected problem
  ...     
  // rethrow exception : we don't want to swallow unknown problem warning  
  throw;  
} 

推荐阅读