Exception 我应该处理哪些例外情况?

Exception 我应该处理哪些例外情况?,exception,exception-handling,Exception,Exception Handling,我正在设计一个WinForms应用程序 目前,我所有的异常都记录在UI级别 然而,对于他们中的任何一个,除了日志记录之外,我不做任何事情。这是否表明设计不好 此外,在一个方法(.NET的方法在windows服务上执行命令)中,它可以抛出Win32Exception和InvalidOperationException类型的异常 对于FileNotFound这样的异常,我可以提示用户提供另一个文件(尽管.NET内置了检查文件是否存在的方法),但对于上述异常,它们都是由于机器的低级问题,因此只能真正记

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

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

然而,对于他们中的任何一个,除了日志记录之外,我不做任何事情。这是否表明设计不好

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

对于FileNotFound这样的异常,我可以提示用户提供另一个文件(尽管.NET内置了检查文件是否存在的方法),但对于上述异常,它们都是由于机器的低级问题,因此只能真正记录这些问题

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

(我将在整个答案中使用的。)

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

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


您不应该捕获
ArgumentNullException
或任何其他bonehead异常。如果你那样做很痛,就不要这样做。如果在不应该传递的情况下传递空参数,则不要传递它。修复代码,以便它预先处理空引用。

您提到的Win32和InvalidOperation异常的原因是什么?视情况而定,他们可能被认为是骨性的、外源性的、令人烦恼的或致命的。