当编写一个函数时,你通常可以预测潜在的问题(如文件不存在或错误的输入类型)。 与用户交流这些问题,是条件(conditions
)的工作: 错误、 警告和消息
- 严重错误(
Fatal error
)由stop()
发起,并强制终止所有执行的程序。 当一个函数没有办法继续运行时,要使用错误(Error
) - 警告(
Warning
)是由warning()
产生的,用于显示潜在的问题,比如当某些向量化的输入元素无效的时候,如log(-1:2)
- 消息由
message()
产生,是一种提供信息输出的方法,用户可以很容易地忽略掉它们(suppressMessages()
)。 我经常使用信息来让用户知道,对于一些缺失的重要参数,函数自动选择了什么值不要使用
print()
cat()
输出异常,因为无法捕获
条件处理工具(Condition handling tools
),比如 withCallingHandlers()
、tryCatch()
和try()
,允许你在条件发生时采取特定的动作
防御性编程:如何在常见的错误发生之前避免它们, 本原则是快速失败(**fail fast**
),一旦出现问题就要发起错误。 在 R 中,这通过三种特定模式来实现: 检查输入的正确性, 避免非标准计算,以及避免函数可以返回不同类型的输出
调试技术
一般步骤
一般来说有四个步骤,当然print()
大法也不是不行