Lua错误处理方式

Lua 错误处理方式

本人Java出身,在学习Lua过程中发现其多错误的处理方式较Java有所不同,但想法和结果都是一样的。不管怎样,先在这里记录一下。

发生错误

在Lua中发生错误有三种情况

1. 语法错误,比如

a = b 
--~ b未定义
  1. 运行时错误
b = nil
--~ 这里b没有初始化成功
a = 10 / b
  1. 手动抛出错误
--~ error函数抛出错误
error('error message',1)
--~ 断言错误
assert(false, 'assert 错误')

错误处理

  1. pcall
    pcall 接受一个“被监控”函数和函数参数,当发生错误时返回false,正常执行后返回true
local run = function(str) 
    print('befor-->\t' .. str)
    error('error in here')
    print('after')
end
if pcall(run,'hello') then
    print('all right')
else
    print('error')
end

输出 “error”
2. xpcall
xpcall接受“被监控”函数,错误处理函数和函数参数,发生错误时将调用错误处理函数,在错误处理函数中可通过debug.traceback()获取错误信息或debug.debug()进入错误检查见面。

local run = function(str) 
    print('befor-->\t' .. str)
    error('error in here')
    print('after')
end


local handler = function()
    print('error')
    local trace = debug.traceback()
    print(trace)    
    local d = debug.debug()
    print(d)
end

local result = xpcall(run, handler, 'hello')
print(result)

输出
error
stack traceback:
.\task2.lua:40: in function <.\task2.lua:38>
.\task2.lua:32: in function <.\task2.lua:31>
[C]: in function ‘xpcall’
.\task2.lua:53: in main chunk
[C]: ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值