IO和错误处理
原创大约 3 分钟
IO
官方文档中的IO处理分为隐式文件处理(Implicit File Handles)
和显式文件处理(Explicit File Handles)
两种模式。
隐式文件处理(Implicit File Handles
):需要设置默认输入
和默认输出
,后续的读写操作由默认
文件完成。显式文件处理(Explicit File Handles
):需要返回一个句柄
,后续的操作都通过这个返回的句柄
完成。
-- 不管隐式文件处理还是显式文件处理,所有开启文件操作的语句为:file = io.open(filename[, mode])
-- mode的取值为r、w、a、r+、w+、a+、b、+
-- r:以只读方式打开文件,且文件必须存在
-- w:只写入文件,若文件存在则原内容清空,若不存在则创建文件
-- a:以追加的方式写入附件,若文件不存在则创建文件,如果存在那么写入的数据会被加到文件尾(原先的内容会被保留)
-- r+:以可读写方式打开文件,且文件必须存在
-- w+:读写文件,若文件存在则原内容清空,若不存在则创建文件
-- a+:同a,但此附件可读可写
-- b:以二进制模式读写文件
-- +:文件既可读也可写
-- 隐式文件处理
-- 以只读方式打开文件
file = io.open("C:\\workspace\\test1.txt", "r")
-- 设置输入文件为test.txt
io.input(file)
-- 输出文件的全部内容
for lines in io.lines("C:\\workspace\\test1.txt") do
print("lines => " .. lines)
end
-- 调用一次就读取一行,io.read() 等同于io.read("*l")
print(io.read())
-- 从当前位置读取全部内容
print(io.read("*a"))
-- 关闭打开的文件
io.close(file)
-- 以附加的方式打开只写文件
file = io.open("C:\\workspace\\test1.txt", "a")
-- 设置输出文件为test.txt
io.output(file)
-- 在文件最后一行添加内容
io.write("\nImplicit File Handles")
-- 关闭打开的文件
io.close(file)
-- 显式文件处理
-- 以只读方式打开文件
file = io.open("C:\\workspace\\test2.txt", "r")
-- 得到文件句柄,输出文件全部内容
for lines in file:lines("C:\\workspace\\test2.txt") do
print("lines => " .. lines)
end
-- 关闭打开的文件
file:close()
-- 以附加的方式打开只写文件
file = io.open("C:\\workspace\\test2.txt", "a")
-- 在文件最后一行添加内容
file:write("\nExplicit File Handles")
-- 关闭打开的文件
file:close()
错误处理
Lua通过assert
、error
、pcall
、xpcall
和debug
这几个函数来处理错误。
a = 1
b = "2"
-- 如果出错就抛出错误消息
assert(type(a) == "number", "a不是一个数字")
-- assert(type(b) == "number", "b不是一个数字")
-- 定义一个简单的函数
local function add(a, b)
return a + b
end
-- 使用pcall
if pcall(add, 1, 2) then
print(true)
else
-- error (message [, level])
-- 1:默认,调用error的位置(文件 + 行号)
-- 2:指出哪个调用error
-- 0:不添加错误位置信息(0和2没任何区别)
error("出错了", 1)
end
-- 使用xpcall
function error_handler(err)
-- 一并打印出调用栈中的信息
print("自定义错误信息:", err, debug.traceback())
end
if xpcall(add, error_handler, 1) then
print(true)
else
error("出错了", 1)
end
感谢支持
更多内容,请移步《超级个体》。