Logo
Section 1 / 6

异常处理简介

在本节课中,我们将简要介绍R语言中的异常处理。

导入

异常处理简介

在本节课中,我们将简要介绍R语言中的异常处理。

在执行程序时,可能会发生许多意外情况。代码可能产生错误或警告。大多数情况下,我们不希望这些情况打断程序的正常流程。那么,当你的R代码出现问题时,应该怎么办呢?本章将介绍所有有助于解决此类问题的工具。

本章将教会我们如何优雅地处理意外问题。我们将学习各种能够报告问题并让我们进行处理的函数。这类操作的专业术语称为**“异常处理”**。

什么是异常处理?

异常处理包括三个步骤:预先预测可能出现的错误、识别错误位置,并在程序中妥善解决该问题。

...
异常处理

如上图所示,“预判”意味着作为程序员,我们意识到某些地方可能出错。我们定位到错误发生的地点,分析其可能发生的原因和位置,然后尝试让程序在出现错误的情况下仍能继续运行。我们会寻找最佳解决方案,避免编译器抛出意外错误。

错误处理器是一类专门用于防止错误的程序。当错误发生时,它们能够恢复程序状态,而不会导致程序突然终止;如果无法恢复,则以安全的方式结束受影响的应用程序。

R脚本的执行可能被以下几种R信号中断:

  • 错误
  • 警告
  • 信息提示
  • 用户主动中断(通过按下 CTRL + C / BRK 或 ESC)

错误

当程序员尝试执行编译器不允许的操作时,就会出现错误信息。例如,你可能记得,不同类型对象之间的算术运算是不被允许的。因此,编译器会在此处抛出错误。

1"a" + 1

此处,编译器将抛出错误:

1Error in "a" + 1 : non-numeric argument to binary operator

警告

某些警告信息会在不终止程序执行的前提下提醒用户。它的含义是:“虽然我可以给出一个结果,但你的输入可能存在潜在问题,因此计算结果可能不准确。”

例如,当你创建一个矩阵,传入的数值向量长度不是行数的整数倍或约数时。

1myMatrix <- matrix(c(1:10), nrow = 4, byrow = TRUE) 2print(myMatrix)

在上述代码片段中,传入的向量长度为10,而指定的行数为4。10个数字无法直接均匀分配到4行的矩阵中,尽管这种操作仍然可行。因此,编译器会自动完成转换,但同时显示一条警告 ⚠️:

1Warning message: 2In matrix(c(1:10), nrow = 4, byrow = TRUE) : 3 data length [10] is not a sub-multiple or multiple of the number of rows [4]

现在我们已经对异常处理有了基本了解,接下来就进入实际代码中添加异常处理机制的学习。

R 中的输入/输出

异常处理