我想使用lua创建文件。但是会发生错误。
我使用luajit-2.0.5。
local f = io.open("C://Users//lolgo//OneDrive//Рабочий стол//lua//test.txt", "a")
f:write('Hello world\n')
f:close()
我希望代码能正常工作,但是会出现错误。attempt to index local 'f' (a nil value)
答案 0 :(得分:1)
从Lua 5.3 Reference Manual 6.8: Input Output Facilities: io.open
io.open(文件名[,模式])
此功能在模式下打开文件 在字符串模式下指定。如果成功,它将返回一个新的 文件句柄。
您不能仅仅期望此操作有效。因此,在尝试索引它之前,必须检查io.open是否实际上返回了文件句柄。
您需要某种错误处理。
local f = io.open("C://Users//lolgo//OneDrive//Рабочий стол//lua//test.txt", "a")
if f then
f:write('Hello world\n')
f:close()
else
print("cannot access file")
end
您的路径或用户权限有问题。
在您的情况下,很可能是由于路径中的双斜杠。
使用双反斜杠获得单个反斜杠或使用单个反斜杠。
答案 1 :(得分:0)
由于路径错误,无法打开文件。没有理由在其中有麻烦的斜线。只需将其更改为"C:/Users/lolgo/OneDrive/Рабочий стол/lua/test.txt"
就可以了。
由于op.open
不会引发错误,而是返回nil
+错误消息,所以它不会在那里崩溃,而是在您尝试索引f
的下一行中,即nil
。
如果要处理这些情况,请在尝试打开文件后检查f
是否为零,如果是,则执行其他操作。
local f, err = io.open(...)
if not f then
print("Error opening file!")
-- Try something else instead
else
f:write("Hello World!\n")
f:close()
end
如果无法打开文件时程序崩溃,可以将对io.open(...)
的调用转换为assert(io.open(...))
,当io.open
返回{{1 }},并利用提供的错误消息,因此您可以更轻松地发现将来可能出现的问题。
nil