lua的pcall

对于大多数应用而言,我们无须在Lua代码中做任何错误处理,应用程序本身会负责处理这类问题。
所有Lua语言的行为都是由应用程序的一次调用而触发的,这类调用通常是要求Lua语言执行一段代码。
如果执行中发生了错误,那么调用会返回一个错误代码,以便应用程序采取适当的行为来处理错误。
当独立解释器中发生错误时,主循环会打印错误信息,然后继续显示提示符,并等待执行指定的命令。
不过,如果要在Lua代码中处理错误,那么就应该使用函数pcall(protected call)来封装代码。

在Lua的cjson库中,pcall函数的原型是:

function pcall(f [, arg1, ···])


其中,`f` 是要执行的函数,`arg1, ···` 是可选的参数。
pcall函数会尝试执行函数 `f`,并捕获其中可能出现的错误,以防止整个程序崩溃。
如果执行成功,pcall会返回`true`,并将函数 `f` 的返回值一并返回;
如果执行过程中出现错误,pcall会返回`false`,并将错误信息作为第一个返回值返回。

需要注意的是,pcall函数只能捕获 Lua 中的错误,无法捕获底层的C函数调用错误。
如果 `f` 是一个 C 函数,发生的错误将会直接导致整个程序崩溃。

  1 --一个使用示例
  2 package.cpath = "cjson/?.so;" .. package.cpath
  3 local cjson = require("cjson")
  4 
  5 local function is_json(str)
  6     local success, result = pcall(cjson.decode, str)
  7     return success
  8 end
  9 
 10 local test_str1 = '{"name": "John", "age": 30}'
 11 local test_str2 = 'This is not a valid JSON string'
 12 
 13 local if_str1_json = is_json(test_str1)
 14 local if_str2_json = is_json(test_str2)
 15 
 16 print(if_str1_json)
 17 print(if_str2_json)
 18 
 19 if if_str1_json then
 20     print("test_str1 is a valid JSON")
 21 else
 22     print("test_str1 is not a valid JSON")
 23 end
 24 
 25 if if_str2_json then
 26     print("test_str2 is a valid JSON")
 27 else
 28     print("test_str2 is not a valid JSON")
 29 end

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值