如何在不输出堆栈跟踪的情况下终止R Shiny会话或R脚本
解决方案
Shiny 会话场景(仅终止当前会话,不影响其他)
优先使用Shiny内置的stopApp()函数,符合你不终止所有Shiny会话的需求,且默认不会输出完整堆栈跟踪:
- 基础用法:直接在错误处理逻辑中调用即可
stopApp() # 也可指定返回值,如 stopApp("执行因错误终止") - 搭配
withCallingHandlers的静默终止写法:withCallingHandlers( # 你的业务逻辑代码 expr = { # 示例触发错误的逻辑 stop("自定义错误触发") }, error = function(e) { # 临时关闭错误信息输出,避免打印栈跟踪 old_opt <- options(show.error.messages = FALSE) on.exit(options(old_opt), add = TRUE) stopApp() } )
你之前调用invokeRestart("abort")报错,是因为该操作直接中断了Shiny的事件回调循环,没有处理Shiny会话的清理逻辑,因此会触发execCallbacks相关报错。
普通 R 运行场景(无多Shiny会话需求)
如果不需要保留其他Shiny会话,可通过禁用错误栈打印后调用终止逻辑:
withCallingHandlers( expr = { # 你的业务逻辑代码 stop("触发错误") }, error = function(e) { # 关闭错误信息和默认栈跟踪输出 options(show.error.messages = FALSE, error = NULL) invokeRestart("abort") } )
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

