file:write() 错误:“bad argument #1 to 'write' (string expected, got nil)”

local log = io.open("log.txt","a")
local logText

for i=1,8 do --在某些程序的其他地方可能有用,因此即使您认为它是无意义的,也放在这里是因为它可能会影响结果
  if a == 1 then --这只是一个示例用的丢到变量
    press = 4; logText = "A = 1."
  else
    press = 8; logText = "没有其他规则适用。"
  end

  if i == 8 then
    log:write(logText)
    log:write("\n正确的组合: "..press.."\n") --声称错误在这里
    log:close()
  end
end

第二个 log:write() 报错了 ( bad argument #1 to 'write' (string expected, got nil)),声称我在函数中直接给它字符串,但实际上它并没有。这让我非常烦恼。但是,这个错误并不总是发生 - 其他时候,它的工作完美无瑕,而看上去并没有任何原因。 其次,当我在上面的 if 语句中加入一个 if 语句时,现在它认为错误在 if 语句的那一行,例如:

if press ~= 0 then --声称错误在这里
  log:write("\n正确的组合: "..press.."\n")
end

我在我的程序中有多个这种示例的代码副本,具有不同的变量/值,并且我已多次验证它们都是相同的。 这可能会导致什么错误,以及为什么?

点赞
用户4567755
用户4567755

虽然在问题的示例中无法再现它,但是通过以类似方式编写的脚本,presslogText可能仍然保持为nil。这是因为它们仅在程序的特定分支中赋值。

尝试预先为它们赋予“空”值,以避免在拼接或io.write时出现nil问题:

local log = io.open("log.txt","a")
local logText = ""
local press = 0

-- 其余逻辑。
2019-11-06 10:40:01