Language agnostic 转述例外问题

Language agnostic 转述例外问题,language-agnostic,exception-handling,Language Agnostic,Exception Handling,我在这里读了几篇关于异常处理/重新引用异常的文章(通过查看投票率最高的线程),但我有点困惑: -为什么不希望立即捕获块处理异常,而是希望它上面的某个异常 -此外,我经常读到,您应该只处理可以“处理”的异常。这是否意味着要对此采取实际行动,例如重试操作?你的第二点就是第一点的答案。有时,较低级别的功能对应用程序的上下文了解不够,无法知道正确的操作应该是什么。例如,如果打开一个文件进行读取失败,因为没有该名称的文件,那么应用程序可能希望请求另一个文件,或者中止整个操作,或者诸如此类。在某种程度上,应

我在这里读了几篇关于异常处理/重新引用异常的文章(通过查看投票率最高的线程),但我有点困惑:

-为什么不希望立即捕获块处理异常,而是希望它上面的某个异常


-此外,我经常读到,您应该只处理可以“处理”的异常。这是否意味着要对此采取实际行动,例如重试操作?

你的第二点就是第一点的答案。有时,较低级别的功能对应用程序的上下文了解不够,无法知道正确的操作应该是什么。例如,如果打开一个文件进行读取失败,因为没有该名称的文件,那么应用程序可能希望请求另一个文件,或者中止整个操作,或者诸如此类。在某种程度上,应用程序的某些部分将负责做正确的事情,当然,除非程序崩溃是可以接受的操作。

您的第二点是第一点的答案。有时,较低级别的功能对应用程序的上下文了解不够,无法知道正确的操作应该是什么。例如,如果打开一个文件进行读取失败,因为没有该名称的文件,那么应用程序可能希望请求另一个文件,或者中止整个操作,或者诸如此类。在某种程度上,应用程序的某些部分将负责执行正确的操作,当然,除非程序崩溃是可以接受的操作。

您可能希望捕获异常(例如,找不到文件)并进行一些处理-例如,如果您打开两个文件,而第二个文件丢失,在继续之前,您需要再次关闭第一个文件,以便它不会保持打开状态

然后,您可能想告诉调用方发生了错误,因此重新引发相同的异常或引发新的异常,以描述问题


在某些情况下,如果您遇到异常,您的代码无法知道它是否是错误(例如,如果您被要求加载一个XML文件,但您遇到了一个未找到的文件异常,这是一个错误,还是应该返回一个空的XML结果?)。在这些情况下,您可能希望重新抛出异常,或者不处理所有异常,并让调用代码决定如何处理该问题。

您可能希望捕获异常(例如,找不到文件)并进行一些处理-例如,如果您打开了两个文件,而第二个文件丢失,在继续之前,您需要再次关闭第一个文件,以便它不会保持打开状态

然后,您可能想告诉调用方发生了错误,因此重新引发相同的异常或引发新的异常,以描述问题


在某些情况下,如果您遇到异常,您的代码无法知道它是否是错误(例如,如果您被要求加载一个XML文件,但您遇到了一个未找到的文件异常,这是一个错误,还是应该返回一个空的XML结果?)。在这些情况下,您可能希望重新抛出异常,或者不处理所有异常,并让调用代码决定如何处理该问题。

回答第二个问题-您需要在立即块中处理异常,前提是您可以对此做任何事:例如关闭与db的连接,关闭流,重试或使用不同参数重试,记录异常(如果在更高级别上没有异常通用处理程序)。可能只有直接代码块知道这些细节并能处理它们。调用块需要知道发生了错误,它们可能更清楚如何处理异常


例如,即时块与文件一起工作。调用者可能尝试从不同的位置打开文件(在“探测”过程中),只要至少有一个成功,就会忽略几个错误。代码的另一部分可能会将第一次失败的尝试视为错误。Caller block可能会选择通知用户发生错误,也可能会让用户知道一些关于如何解决问题的有用信息。另外,提供通知支持人员问题的方法也很好,这是一种允许用户请求帮助、描述问题和发送消息的对话框。在此消息中,您可以附加日志、有关环境的一些信息,如操作系统、框架版本、程序、浏览器功能,以及诊断问题所需的任何信息(如果用户允许).

回答您的第二个问题-仅当您可以对此采取任何措施时,才需要在即时块中处理异常:例如关闭与数据库的连接、关闭流、重试或使用不同参数重试、记录异常(如果在更高级别上没有异常通用处理程序)。可能只有直接代码块知道这些细节并能处理它们。调用块需要知道发生了错误,它们可能更清楚如何处理异常

例如,即时块与文件一起工作。调用者可能尝试从不同的位置打开文件(在“探测”过程中),只要至少有一个成功,就会忽略几个错误。代码的另一部分可能会将第一次失败的尝试视为错误。Caller block可能会选择通知用户发生错误,也可能会让用户知道一些关于如何解决问题的有用信息。另外,提供通知支持人员问题的方法也很好,这是一种允许用户请求帮助、描述问题和发送消息的对话框。在此消息中,您可以附加日志、有关环境的一些信息,如操作系统、框架版本、程序、浏览器功能以及诊断问题所需的任何信息(如果用户允许您这样做)。

如果捕获异常的方法能够满足其构造,则会“处理”异常。例如,当用户从“最近的文件”菜单中选择一项时调用的例程
OpenRecentDocument
的约定可能会指定