- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在某些情况下,我只想调用某个方法来做一些工作,而不关心处理它可能抛出的所有特定异常。相反,我真正关心的是方法是否成功。
我将提供一个 .NET/C# 示例。假设我有一个要复制的文件,我真正关心的是复制操作是否成功。如果复制失败,我不在乎特定异常是 FileNotFoundException 还是 IOException“磁盘空间不足”异常或其他……在这种情况下,我的应用程序将正常运行,因为此操作并不重要。
所以实现这个的想法是:
try
{
// try
System.IO.File.Copy(strFile, strFile + ".new");
}
catch (Exception ex)
{
// if critical exception then rethrow
if (IsCritical(ex))
throw;
// else just log and swallow...
Console.WriteLine("Failed to copy the file: " + ex.Message);
}
其中 IsCritical(Exception ex) 是辅助方法,定义为:
public static bool IsCritical(Exception ex)
{
if (ex is OutOfMemoryException) return true;
if (ex is AppDomainUnloadedException) return true;
if (ex is BadImageFormatException) return true;
if (ex is CannotUnloadAppDomainException) return true;
if (ex is ExecutionEngineException) return true;
if (ex is InvalidProgramException) return true;
if (ex is System.Threading.ThreadAbortException)
return true;
return false;
}
此问题基于以下文章:Exception Handling in C# with the "Do Not Catch Exceptions That You Cannot Handle" rule in mind
这个想法是遵循异常处理最佳实践的主要规则:- 不要在不重新抛出的情况下捕获一般异常- 只捕获您知道如何处理的异常 -(在这种情况下,我想以相同的方式处理它们......通过记录并继续应用程序逻辑)。
那么对于给定的场景,这是一个好的方法吗?如果不是,为什么会更好?
最佳答案
通常建议不要吞下异常的原因是它可以隐藏错误。例如,您正在执行 File.Copy
以外的操作:您也在执行字符串处理 (strFile + ".new"
)。这不能抛出(OOM 除外),但如果计算更复杂,您可能隐藏了一个错误。
在这种情况下,您可能应该将所有计算移出 try block 。然后吞下任何异常就可以了。我有记录它们的习惯,以防万一我很小心还是犯了错误。
不要吞下不必要的东西的规则是为了保护开发人员免于犯错。如果您有理由确定一切都很好,那么您就不需要遵守规则。
关于c# - 是否可以在某些场景中吞下除关键异常之外的所有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903653/
我需要浏览一个文件,然后将捆绑包与另一个文件连接起来。我尝试了下面的 gulp 代码,但它无法正常工作。 当我在 mymodule.js 中进行更改并运行 gulp 时,这些更改会出现在包文件中,但不
尝试创建 Flux 存储。当我运行 gulp 并检查我的 index.html 时,出现错误“Uncaught TypeError:监听器必须是函数” var AppDispatcher = requ
我在提醒自己“关键字”时偶然发现了这篇文章 http://effbot.org/zone/python-with-statement.htm 。我只是有一个小问题,可能是显而易见的问题。文章指出,这“
我正在使用 Oracle 11g(瘦驱动程序)和 Java 6 在 Windows 上的 Tomcat 7 中开发一个应用程序。我正在开发一个页面,让用户验证存储在 Oracle 数据库中的 SQL
除了向每个回调添加 try..catch block 之外,是否有任何方法可以处理从 jQuery 中的 AJAX 回调抛出的异常?在这种情况下不会调用错误函数。 $.ajax( { url:
我已经编写了代码(如下),以便能够将输入字段拖到另一个输入字段上,但似乎可拖动的燕子 input[text].onfocus . 这会导致问题,即所有可拖动的输入字段都被禁用(firefox)并且单击
在 jQuery 中,如果您在 ajax 回调方法中出错,您将收到正确的控制台错误消息和堆栈跟踪。 $.get("https://api.github.com/users/octocat/orgs",
我正在使用 Apache PdfBox 库,我注意到几乎所有东西都会抛出 IOException,考虑到大多数 IOException 实际上应该是非法状态异常,处理起来非常烦人,但似乎 apache
嘿,我是原型(prototype)的新手。问题是 dom:loaded 回调函数中的 javascript 错误不会在 firefox (webconsole/errorconsole/firebug
我有一个文本框,里面有这个: 问题是它吞下了 Tab 而不是跳转到下一个控件。如何捕获文本框的 Tab 键并仍然按 Tab 键顺序保留到下一个控件的 Tab 键?编辑:我也在使用 MVVM 并且 M
我正在尝试让 googletest 在我的 C++ 项目上运行,其中一部分涉及使用 EXPECT_THROW(statement, expected_exception);。我正在使用选择了“Appl
我不明白为什么原型(prototype)会抑制 dom:loaded 事件和 AJAX 处理程序中的错误消息。 给定以下 HTML 片段: Conforming XHTM
我是一名优秀的程序员,十分优秀!