c# - 处理顶级异常
问题描述
有很多讨论为什么捕获顶级异常是一种不好的做法。但是,有时开发人员并不关心操作是否失败。
例如,有一种方法可以根据文件初始化变量,但变量已经具有有效值。开发人员可能不关心读取失败的原因。
在这种情况下,捕获一般异常可能是有效的(可能是?),除了系统异常(没有内存、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()
什么是预期的解决方案,它不会通过处理所有潜在异常而使开发人员不知所措,但也满足一般错误处理原则(仅捕获您处理的错误)?
解决方案
如果用户不关心文件读取结果,那么您应该 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;
}
推荐阅读
- django - Django JWT 身份验证在浏览器中不起作用?
- java - 有没有办法通过 USB 在 Java 中传输数据
- wordpress - Wordpress ERROR :reCAPTCHA verification failed. Please Try Again
- python - 尝试绘制河流时出现 Cartopy 错误
- c++ - 如何在动态加载的库中实例化静态类
- excel - 两种格式的图表
- excel - excel vba 在文本前插入格式化符号,保持原有文本的原始格式
- regex - 如何在字符串中间grep 2个单词
- heroku - Strapi 未更新 API
- javascript - 如何在 Nuxt 中使用 ffmpeg?