callr包错误处理机制及自定义错误输出方式咨询
自定义callr包子进程的错误输出格式
问题场景
使用callr的r_bg()创建后台子进程时,默认的错误提示会包含子进程相关的冗余信息,示例如下:
rp <- callr::r_bg(function() stop("You should see this"), error = getOption("callr.error", "error")) Sys.sleep(2) rp$get_result() #> Error: ! in callr subprocess. #> Caused by error in `(function () …`: #> ! You should see this
这类callr相关的包装信息会让终端用户困惑,需要只保留自定义的错误消息Error: You should see this。
解决方案
将error参数设置为"simple",即可直接返回原始的错误消息,屏蔽callr的上下文包装内容:
rp <- callr::r_bg(function() stop("You should see this"), error = "simple") Sys.sleep(2) rp$get_result() #> Error: You should see this
error参数的有效选项
callr的error参数支持以下取值,对应不同的错误处理逻辑:
- "error"(默认值):抛出包含callr子进程上下文的结构化错误,即默认显示的带前缀的错误信息
- "simple":返回原始错误对象,仅展示自定义的错误消息,无额外上下文
- "stack":抛出包含完整调用栈的错误,包含子进程内的调用栈详情
- "debugger":在子进程中启动调试器,用于调试错误场景
- "null":不主动抛出错误,返回错误对象本身,需自行编写逻辑处理
内容的提问来源于stack exchange,提问作者JBGruber
相关产品推荐
相关产品推荐

