You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不输出堆栈跟踪的情况下终止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 22:06:02