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