我已经做了几个小时的2009脚本构建器,但我不知道如何让它打印错误。如果我使用print(loadstring("a"))
,它会打印到roblox输出nil [string "s"]:1: '=' expected near '<eof>'
中,==为nil。我想要得到的是它在: '=' expected near '<eof>'
末尾报告的错误,类型是nil,所以我不知道如何得到它。如果有人能帮上忙,我将不胜感激!
发布于 2018-06-21 07:06:44
请参阅Lua5.1手册,该手册将为您提供load
文档
如果有错误,...返回nil加上错误消息。
Lua通常会将错误消息作为第二个返回值返回:
local f, err = loadstring(mycode)
if not f then
print("There was an error: `" .. err .. "`")
end
此err
从错误发生的位置开始,这无助地将输入引用到loadstring
。
例如,对于输入代码"hello there"
,错误是
[string "hello there"]:1: '=' expected near 'there'
Lua似乎在第一个换行符或63个字符(以较少者为准)处截断了引号:
对于"hello\there"
,错误是
[string "hello..."]:2: '=' expected near 'there'
对于"helloooooooooooooooooooooooooooooooooooooooooooooooooooooo there"
,错误是
[string "helloooooooooooooooooooooooooooooooooooooooooooooooooooooo ther..."]:1: '=' expected near 'there'
如果您确定脚本的前63个字符/第一行中没有"]:
,则只需搜索该序列即可找到它的终止位置:
local location, message = err:match('^(%[string ".*"%]:%d+:%s+)(.*)$')
例如,如果您的代码是"hello\"]:1: there"
,那么这是不正确的,因为您可能想要解决这个问题。
解决这个问题的最简单方法是从引用的第一行中夺走用户控制权:在代码前面加上您自己的第一行(如果您向用户显示错误,请确保调整错误的行号:)
local f, err = loadstring("--code\n" .. mycode)
print(err)
现在,错误消息应该总是开始
[string "--code..."]:
https://stackoverflow.com/questions/50957714
复制相似问题