我正在尝试运行一系列测试,并在每次测试中收集一些元数据。如果在其中一项测试期间出现错误,我想保存回溯信息,但不退出脚本。例如:
-- Example program
for _, v in ipairs(tests) do
--check some results of function calls
if v == nil then
--error("function X failed") no exit
--save back trace to variable/file
-- continue with program
end
end
我目前不知道在lua中是否可以告诉函数error() 创建后跟踪后不要停止。有关如何执行此操作的任何想法?
答案 0 :(得分:3)
debug.traceback ([thread,] [message [, level]])
(source)是您要寻找的。您可以编写一个函数:1.获取回溯2.打开文件3.将回溯写入文件4.关闭文件。
在这种情况下,您必须使用2级,因为0是debug.traceback
函数,1是调用它的函数(即您的函数),2是调用那个的函数。 message
可能是您的错误代码。然后,您只需在脚本中本地覆盖error
函数即可。调用error
只会记录错误,而不会退出程序。
编辑:如果需要,您还可以全局覆盖error
,但是如果在其他地方发生严重错误(您未编写自己的代码),则可能会导致意外结果),程序仍然继续。
使用这样的构造会更好:
if os.getenv 'DEBUG' then
my_error = function()
-- what I explained above
end
else
my_error = error
end
,只需在通常使用my_error
的所有地方使用error
。