exception - 我应该处理哪些异常?

标签 exception

我正在设计一个 WinForms 应用程序。

目前,我的所有异常都在 UI 级别记录。

但是,对于他们中的任何一个,我除了记录之外不会做任何事情。这是否表明设计很糟糕?

此外,在一种方法中(.NET 的方法在 Windows 服务上执行命令),它可以抛出 Win32Exception 和 InvalidOperationException 类型的异常。

对于像 FileNotFound 这样的异常,我可以提示用户提供另一个文件(尽管 .NET 有内置方法来检查文件是否存在),但是对于像上面这样的异常,它们都归结为低级问题与机器一起,所以这些只能被真正记录。

这是决定捕获哪些异常的正确方法吗?另外,我应该捕获还是抛出 ArgumentNullException?这表明代码有问题,对吗?

最佳答案

(我将在整个答案中使用 Eric Lipperttaxonomy of exceptions。)

如果您对此无能为力,则只需登录并退出当前操作、屏幕或整个应用程序,具体取决于错误的严重程度。只是不要尝试在遇到致命异常时继续操作。在某些极端情况下(例如AccessViolationException),仅记录甚至让finally block 运行可能不是一个好主意,因为您不知道如果在损坏的进程中运行代码会发生什么。

FileNotFoundException 和其他您无论如何都应该处理的外源异常。尽管您可以事先检查文件是否存在,但没有什么可以阻止它在检查和使用之间变得不可访问。这些异常取决于您无法控制的外部条件,因此您应该做好处理它们的准备。

您永远不应该捕获ArgumentNullException或任何其他愚蠢的异常如果这样做会让你感到痛苦,那就不要这样做。如果你在不应该传递的时候传递了一个空参数,那么就不要传递它。修复代码,以便它预先处理空引用。

关于exception - 我应该处理哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564325/

相关文章:

c++ - 如何在 C++ 中以干净的方式处理异常

java - 覆盖 Java 单元测试中的异常语句

python - 为什么 mp.Pool fast 会失败,而 ProcessPoolExecutor 不会?

python - (单元)测试python信号处理程序

angular - JHipster 自定义错误消息翻译

asp.net - 通过 ASP.NET 成员身份检查用户角色时出现 SemaphoreFullException

javascript - 为什么框架内的异常在 qUnit 中得不到通知?

c# - 是否可以处理 LINQ 查询中的异常?

angular - 在 Angular 应用程序中抛出错误

android - 在整个 Activity/Fragment 生命周期中处理异常