gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:54:33 25 4
gpt4 key购买 nike

我正在编写一个自定义错误处理程序(使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com