Language agnostic 有人能给我解释一下异常处理吗?

Language agnostic 有人能给我解释一下异常处理吗?,language-agnostic,exception-handling,terminology,Language Agnostic,Exception Handling,Terminology,我认为这是一个愚蠢的问题,但我经常听到和看到异常处理这个术语。我使用了try/catch,但我仍然想知道“处理”到底是什么意思。谁能举个例子,我们可以说这个异常实际上是被处理的 对不起,我的英语不好,希望我能说清楚。异常处理是指捕捉到异常并处理它。处理它可能是从中恢复、提示错误消息,或者只是使用示例数据——适当的方法取决于您的应用程序。在游戏中使用样本数据可能很好,一个蓝色像素不会造成任何伤害,而在医疗软件中这是一个坏主意 它与异常吞咽形成对比,即捕获异常而不对其进行任何操作。它意味着捕获异常并

我认为这是一个愚蠢的问题,但我经常听到和看到异常处理这个术语。我使用了try/catch,但我仍然想知道“处理”到底是什么意思。谁能举个例子,我们可以说这个异常实际上是被处理的


对不起,我的英语不好,希望我能说清楚。

异常处理是指捕捉到异常并处理它。处理它可能是从中恢复、提示错误消息,或者只是使用示例数据——适当的方法取决于您的应用程序。在游戏中使用样本数据可能很好,一个蓝色像素不会造成任何伤害,而在医疗软件中这是一个坏主意


它与异常吞咽形成对比,即捕获异常而不对其进行任何操作。

它意味着捕获异常并根据其类型执行一些逻辑,以便您的应用程序可以优雅地处理它,而不是突然关闭

以下是Java中的一个示例(尽管是人为的):

如果使用此函数,则不能保证
索引
a
中是有效的位置。在Java中,这将抛出一个
ArrayOutOfBoundsException

调用arrayRetrieve的代码需要意识到这种可能性,并相应地处理这种情况:

int num = 0;
try {
    num = arrayRetrieve(someArray, 77);
}  catch (ArrayOutOfBoundsException e) {
    // Set num to a default value, or log an error, or however you want to handle this case
}
如果未捕获到BoundsException的
阵列,则会导致程序崩溃

(我之所以说这个例子是人为设计的,是因为Java特别有两种
异常
——一种是必须显式捕获的异常,另一种是不需要捕获的异常。
ArrayOutOfBoundsException
就是后者的一个例子。)

“处理”基本上包括优雅地处理错误,而不是做出假设,让程序崩溃


这可能包括记录并继续,吞咽(隐藏它并假装它从未发生),或者显示错误并取消当前操作,或者实际上可能包括关闭应用程序。这完全取决于应用程序和异常是什么。

catch
块中的代码(或您的语言使用的任何代码)正在“处理”异常,或者至少应该是这样的。

在一个简单的级别上,“处理”只是指“处理”

例如,你可能

  • 将错误数据记录到文件或数据库中
  • 向用户显示错误消息
  • 终止程序的执行

…取决于错误的严重性/您正在开发的应用程序的种类。

这称为异常处理,因为异常并不总是终止条件

当您遇到异常时,您可以“处理”该异常,方法是纠正导致异常的任何原因并继续


例如,您可能会得到一个“除以零”异常。如果你有一个异常处理程序,你可以捕获异常,修复有问题的数据,或者导致“无效数据”消息,而不是让你的应用程序完全死机。

异常处理指的是在你的程序中处理异常事件,使程序不会崩溃,而是以一种有意义的方式继续运行。如果您说您使用了try/catch,那么无论您在catch块中做什么,都是实际的异常处理。

这是一个常见的英语单词。来自《韦氏词典》:“就……采取行动或执行所需的行动。”说问题已经“处理”就意味着它已经被处理、解决、完成。@BlueRaja,我知道英文单词“处理”的含义。“这样你的应用程序才能优雅地处理”——他只是说他不知道“处理”是什么意思……是的,这就是为什么我提供了一个例子——你知道,90%的帖子都是在你引用的那句话之后。积极思考等等。
int num = 0;
try {
    num = arrayRetrieve(someArray, 77);
}  catch (ArrayOutOfBoundsException e) {
    // Set num to a default value, or log an error, or however you want to handle this case
}