1
3
您可能需要捕获一个异常(例如,找不到文件)并进行一些处理-例如,如果打开两个文件,而第二个文件丢失,则在继续之前,您需要再次关闭第一个文件,这样就不会让它保持打开状态。 然后您可能想告诉调用者发生了一个错误,所以您要重新抛出相同的异常,或者抛出一个新的异常,描述这个问题。 在某些情况下,如果您得到一个异常,您的代码就无法知道它是否是一个错误(例如,如果要求您加载一个XML文件,但您得到一个未找到的文件异常,这是一个错误,还是应该返回一个空的XML结果?)在这些情况下,您要么想要重新抛出异常,要么不完全处理异常,让调用代码决定如何处理问题。 |
2
1
你的第二点是第一点的答案。有时,较低级别的功能对应用程序上下文的了解不够,无法知道正确的操作应该是什么。例如,如果打开要读取的文件失败,因为没有该名称的文件,那么应用程序可能希望请求其他文件,或者中止整个操作,或者其他任何操作。在某种程度上,应用程序的某些部分将负责做正确的事情,当然,除非程序崩溃是可以接受的行为。 |
3
0
回答第二个问题-只有在可以对立即块执行任何操作时,才需要处理立即块中的异常:例如,关闭与数据库的连接、关闭流、使用不同参数重试或重试、记录异常(如果更高级别上没有异常通用处理程序)。可能只有直接的代码块知道这些细节并能处理它们。调用块需要知道发生了错误,它们可能更好地知道如何处理异常。 例如,即时块与文件一起工作。调用者可能会尝试从不同的位置(在“探测”过程中)打开一个文件,并忽略几个错误,只要至少一个成功。代码的另一部分可能将第一次失败的尝试视为错误。调用程序块可能会选择通知用户发生了错误,可能会让她/他知道一些关于如何解决问题的有用信息。此外,还可以提供一种方法来通知支持人员问题“某种对话允许用户请求帮助、描述问题并发送消息。在这个消息中,您可以附加日志,一些关于环境的信息,如操作系统、框架版本、程序、浏览器功能,无论您需要什么来诊断问题(如果用户允许您这样做的话)。 |
4
0
如果捕获异常的方法能够满足其构造,则该异常将被“处理”。例如,例行程序的合同
其中一个不幸的“抓到”是,没有任何标准方法可以让抛出异常的例程指示其尝试的操作是否导致无法回滚的副作用。例如,没有固有的方法来区分
|
M.Jane · 组织和编写异常类的正确方法 6 年前 |
shubham daharwal · java中的内部捕获异常 6 年前 |
Jon · 如何在不需要任何操作的情况下处理Python异常 6 年前 |
felix1415 · C++捕获(标准::异常和e)与捕获(…) 6 年前 |
k0pernikus · 如何在scala中键入可能引发异常的函数? 6 年前 |