我需要将警告转换为错误,以便能够在上游进一步处理它(警告被吞咽在中间的某处,而我无法控制;错误不是) 。要做到这一点,我做了以下内容:`tryCatch`内的`withingCallingHandlers`创建不可捕捉的错误
warning_to_error = function (expr)
withCallingHandlers(expr, warning = stop)
这个伟大的工程:
> warning_to_error(warning('foobar'))
Error in withCallingHandlers(expr, warning = stop) : foobar
不幸的是,这使得错误完全抓不到:
> try(warning_to_error(warning('foobar')))
Error in withCallingHandlers(expr, warning = stop) : foobar
In my real situation,有是我的warning_to_error
和try
之间的几层(包括muffl的逻辑es警告)。我如何使我的调用处理程序引发的错误可以捕获?不幸的是,我无法按照in another Stack Overflow question的说明使用重新启动,因为stop
没有定义重新启动,而且我仍然无法控制正在执行捕获的代码。
谢谢,这使得完美感。我实际上试图做到这一点(=打印/返回条件来检查它),但我的尝试失败了,因为它根本没有发生在我身上,该类将是'错误'以外的任何东西。咄。 –
如果我能以某种方式欺骗调用堆栈信息,它会更大。不幸的是,即使使用在'warning_to_error'的'parent.frame()'中执行的'eval',我也无法实现这一点:堆栈跟踪总是以'eval'结尾。我猜这是不可能的? –
创建一个错误条件对象并在将'sys.calls'的结果传递给'stop'之前将其存储在它中。 –