Exception 在捕获异常时只记录异常是一种不好的做法吗?

Exception 在捕获异常时只记录异常是一种不好的做法吗?,exception,exception-handling,Exception,Exception Handling,捕获异常并记录它是否有负面影响?这类似于对每个异常捕获执行的最小值,但它实际上对异常没有任何作用 我相信这取决于具体情况,例如,用户面临异常时需要弹出窗口等,但在后端,用户看不到的东西却看不到。或者可能不止这些。一般来说,在每种情况下都要做正确的事情。有时,这意味着只记录异常。在其他情况下,您可以执行特定的、有针对性的恢复 例如,如果用户请求您打开一个文件,并且您捕获了一个FileNotFoundException,则应向用户报告此情况,并为他们提供选择其他文件的机会。或者,如果解析用户提供的字

捕获异常并记录它是否有负面影响?这类似于对每个异常捕获执行的最小值,但它实际上对异常没有任何作用


我相信这取决于具体情况,例如,用户面临异常时需要弹出窗口等,但在后端,用户看不到的东西却看不到。或者可能不止这些。

一般来说,在每种情况下都要做正确的事情。有时,这意味着只记录异常。在其他情况下,您可以执行特定的、有针对性的恢复

例如,如果用户请求您打开一个文件,并且您捕获了一个
FileNotFoundException
,则应向用户报告此情况,并为他们提供选择其他文件的机会。或者,如果解析用户提供的字符串会触发
FormatException
(尽管这里通常使用TryX模式来避免异常),请告诉用户输入数字字符串


通常,最好的办法是根本不捕捉异常。如果您不能使用它做任何适当的事情,那么让它冒泡到应用程序堆栈的根目录,您可以在那里记录它,或者经常让它使您的应用程序崩溃。如果您不知道为什么会出现异常,您真的确定您的应用程序是健康的,并且不会损坏数据吗?

一般来说,在每个给定的情况下都要做正确的事情。有时,这意味着只记录异常。在其他情况下,您可以执行特定的、有针对性的恢复

例如,如果用户请求您打开一个文件,并且您捕获了一个
FileNotFoundException
,则应向用户报告此情况,并为他们提供选择其他文件的机会。或者,如果解析用户提供的字符串会触发
FormatException
(尽管这里通常使用TryX模式来避免异常),请告诉用户输入数字字符串


通常,最好的办法是根本不捕捉异常。如果您不能使用它做任何适当的事情,那么让它冒泡到应用程序堆栈的根目录,您可以在那里记录它,或者经常让它使您的应用程序崩溃。如果您不知道为什么会出现异常,您真的确定您的应用程序是健康的,并且不会损坏数据吗?

只有在异常情况下才会出现异常,在执行导致引发异常的任何操作之前,请查看是否可以重写代码以执行检查,如果检查失败,请记录检查结果


您应该使用异常来追踪bug/通知用户他们的输入不正确/矩阵中存在故障

异常只应在异常情况下发生,在执行导致引发异常的任何操作之前,请查看是否可以重写代码以执行检查,如果检查失败,请记录检查结果


您应该使用异常来跟踪bug/通知用户他们的输入不正确/矩阵中有一个小故障

我倾向于将异常传播到GUI级别,在那里可以捕获它们。知道异常在过程中被捕获,并且您不知道它们发生在哪里(没有堆栈跟踪),这是非常令人沮丧的


在框架内工作时,由于接口限制,有时无法传播异常。在这种情况下,我将捕获异常并尝试确保在日志消息中提供发生异常的类和方法

我倾向于将异常传播到GUI级别,在那里可以捕获异常。知道异常在过程中被捕获,并且您不知道它们发生在哪里(没有堆栈跟踪),这是非常令人沮丧的


在框架内工作时,由于接口限制,有时无法传播异常。在这种情况下,我将捕获异常并尝试确保在日志消息中提供发生异常的类和方法

一些异常表明出现严重故障,应用程序应尽快关闭,以避免损坏系统;数据可以安全地保存到恢复文件中,但不应覆盖主文件。其他异常表明发生了意外但可恢复的情况。其他人则表示,微软遗漏了一个他们应该包含在API中的Try_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在前一种情况下,吃一个例外是非常糟糕的。在最后一种情况下,使用异常是获得工作代码的最干净的方法(确保Control.BeginInvoke不会抛出异常所需的变通方法非常可怕,并且比从BeginInvoke中使用异常更容易引起冲突)。在中间情况下,异常处理程序应该修复该情况,使包含它的模块能够遵守它的契约。如果可以做到这一点,则无需进一步传播异常。

一些异常表明情况非常严重,应用程序应尽快关闭,以避免损坏系统;数据可以安全地保存到恢复文件中,但不应覆盖主文件。其他异常表明发生了意外但可恢复的情况。其他人则表示,微软遗漏了一个他们应该包含在API中的Try_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在前一种情况下,吃一个例外是非常糟糕的。在最后一种情况下,使用异常是获得工作代码的最干净的方法(确保Control.BeginInvoke不会抛出异常所需的变通方法非常可怕,并且比从BeginInvoke中使用异常更容易引起冲突)。在中间情况下,异常处理程序应该修复该情况,使包含它的模块能够遵守它的对错。