首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua脚本错误

Lua脚本错误
EN

Stack Overflow用户
提问于 2013-05-01 20:48:26
回答 1查看 370关注 0票数 1

情况:

我想要保存某个数据的记录,该数据是某个文件中传感器的一个值。

代码是..

代码语言:javascript
复制
--Header file
require("TIMER")
require("IPBOX")
require("ANALOG_IN")
require("LOG")

function OnExit()
print("Exit code...do something")
end

function main()
timer = "Timer"
local analogsensor_1 = "AIR_1"
local analogsensor_2 = "AIR_2"
local timestr = os.data("%Y-%m-%d %H:%M:%S")


-- open the file for writing binary data
local filehandle = io.open("collection_of_data.txt", "a")


while true do 
    valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1);
    valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2);

    if (valueOfSensor_1 > 0 and valueOfSensor_2 > 0) then

        -- save values of sensors           
        filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2)"\n");

        -- save values using rolling log appender:          
        LOG.log_event( ScenarioLoggerDevicenameInDeviceList, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2), "any other string you wish to add", "etc", "etc")
        LOG.log_event( ScenarioLoggerDevicenameInDeviceList, " -The Value of the Sensors: ", tostring(valueOfSensor_1))
        print("Hello3"..valueOfSensor_1)
    end

TIMER.sleep(timer,500)
end

-- close the file
filehandle:close()

end 

print("start main")
main()

在这一行中:

代码语言:javascript
复制
filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2)"\n");

我得到一个错误:

代码语言:javascript
复制
"attemp to index global 'filehandle' (a nil value)"

我怎么才能修复它?

EN

回答 1

Stack Overflow用户

发布于 2013-05-01 21:06:12

如果无法打开文件,io.open将返回nil。这可能是由于“未找到文件”、“权限被拒绝”以及其他原因造成的。为了解决这个问题,io.open有第二个返回值,允许您检查错误(实际上,它甚至返回第三个值,这是一个错误代码整数-但其含义取决于系统)。

更改:

代码语言:javascript
复制
local filehandle = io.open("collection_of_data.txt", "a")

代码语言:javascript
复制
local filehandle, message = io.open("collection_of_data.txt", "a")
if not filehandle then
    print(message)
end

您还可以使用以下Lua习惯用法:

代码语言:javascript
复制
local filehandle = assert(io.open("collection_of_data.txt", "a"))

这将做同样的事情。如果assert的第一个参数是nil,那么第二个参数( io.open的第二个返回值)将被打印。如果第一个参数不是nil,则只返回它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16318383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档