r - R-在自定义错误处理程序中从基本环境访问.Traceback

标签 r error-handling

我正在编写一个自定义错误处理程序(使用error选项),主要用于与source运行的程序一起使用。在自定义错误处理程序中,我想计算导致错误的源文件的行号。

通常,每当引发错误时,都会将基本环境中的.Traceback修改为包括导致错误的调用堆栈。此外,为直接存在于源文件中的调用提供了srcref类的属性,该属性包含有关文件中该调用位置的信息。

但是,似乎.Traceback直到自定义错误处理程序结束后才设置,这意味着我无法依靠它来查找导致错误的代码的行号。

有什么方法可以在自定义错误处理程序中获取traceback生成的相同信息?我知道我可以执行sys.calls来获取调用堆栈,但这将不包括有关源的信息。

最佳答案

?traceback中的“警告”部分说:“没有记录.Traceback的存储位置,也没有显示它,并且此内容可能会发生变化。”因此,您不应该依赖该变量。相反,您应该执行?traceback建议的操作(并提供示例),并使用整数的跳过次数来调用它。

foo <- function(x) { print(1); bar(2) }
bar <- function(x) { x + a.variable.which.does.not.exist }
foo(2) # gives a strange error
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found

# This will print the stack trace at the time of the error.
options(error = function() traceback(2))
foo(2)
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
# 2: bar(2) at #1
# 1: foo(2)

关于r - R-在自定义错误处理程序中从基本环境访问.Traceback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27451603/

相关文章:

R:在组上应用函数

R:获取 "inside"环境

r - do.call() 和 tidy 评估

Python 在每个异常上显示自定义错误消息/回溯

r - R : how to initialize and add elements to an array in a loop

r - MSapriori 和 CARapriori 算法在 Python 或 R 中的实现

r - 是否有将 EDF 文件导入 R 的现有方法?

ruby - 如何在 Ruby 中拯救 "invalid Unicode codepoint"?

c# - C#修改多个词典值会引发错误

error-handling - sei ^ 2 : non-numeric argument to binary operator, in metafor中的错误