Lua 异常捕获

lua中的pcall和xpcall函数的使用 参考网址:https://www.runoob.com/lua/lua-error-handling.html pcall函数的使用: 举例1:正确调用情况: function addNumbers(a, b) print("number is") return a + b end local res, info = pcall(addNumbers, 1, 20) print(res) print(info) 这是正常的情况下,调用。 参数说明: pcall的第一个参数是函数的名字; pcall的 阅读详情

Lua 异常处理,Lua异常处理有 pcall 和 xpcall ,两个接口都能终止主函数的执行,区别是 xpcall 可以放进一个错误处理函数,当xpcall执行主函数出错时,通过错误处理函数将出错的详细信息打印出来。简单的说 pcall 只是终止了主函数的执行,没有打印出错的详细信息,xpcall 不仅可以终止主函数的执行,还能通过指定的错误接口来处理出错的信息。

A、下面是pcall调用主函数没有出错的情况:

function sum(a,b)
  local c=a+b
  print(c)
  return c
end

local status,ret_info = pcall(sum,1,2)

print('status=',status,'ret_info=',ret_info)

输出是 :
3
status= true ret_info= 3

B、下面是pcall调用主函数出错的情况:

function sum(a,b)
  local c=a+b+'d'
  print(c)
  return c
end

local status,ret_info = pcall(sum,1,2)

print('status=',status,'ret_info=',ret_info)

输出是:
status= false ret_info= input:2: attempt to perform arithmetic on a string value

总结pcall可以看出,当执行主函数没出错的时候,status为true,ret_info 就是主函数的返回值,当执行主函数出错的时候,
status为false,ret_info 就是出错的简略信息。

C、下面是xpcall调用主函数没有出错的情况:

function sum(a,b)
  local c=a + b
  print(c)
  return c
end

local status,ret_info = xpcall(sum,debug.traceback,1,2)

print('status=',status,'ret_info=',ret_info)

输出结果:
3
status= true ret_info= 3

D、下面是xpcall调用主函数出错的情况:

function sum(a,b)
  local c = a + b + 'd'
  print(c)
  return c
end

local status,ret_info = xpcall(sum,debug.traceback,1,2)

print('status=',status,'ret_info=',ret_info)

输出结果:
status= false ret_info= input:2: attempt to perform arithmetic on a string value
stack traceback:
input:2: in function ‘sum’
[C]: in function ‘xpcall’
input:7: in main chunk
[C]: in function ‘pcall’
demo.lua:49: in main chunk
[C]: in ?

总结xpcall可以看出,当执行的主函数没有出错的时候,pcall 和 xpcall 是一样的返回结果,但当执行的主函数出错的时候,
xpcall 打印的消息会更详细,因为我传入的是debug.traceback 接口,所以打印了debeg的相关信息出来,这个debug.traceback 可以自定义自己的错误处理接口。

E、下面就是自己定义的一个错误处理函数:

function sum(a,b)
  local c = a + b + 'd'
  print(c)
  return c
end

function MyDebug()
   print('call sum function fail ...')
end

local status,ret_info = xpcall(sum,MyDebug,1,2)

print('status=',status,'ret_info=',ret_info)

输出结果:
call sum function fail …
status= false ret_info= nil

可以看出,当主函数出错的时候,调用了自定义的 MyDebug 接口,打印了自定义的出错日志。

Lua学习教程之 捕获异常(tryCatch封装) 当我们的Lua程序遇到有需要保护的代码或者方法时(即使程序异常,也只是抛出异常信息,而不是让程序崩溃),Lua为我们提供了两种解决的办法,这两种方法可以让我们捕获异常,因此封装自己的tryCatch函数。 1.pcall调用 2.xpcall调用 相同点: 当程序正常时,返回true,被执行函数的返回值 不同点: 1.参数不同 pcall(fun) ,参数只有一个被调用函数 xpcall(fun,errHandleFun),参数是被调用函数,错误函数处理 2.执 阅读详情

相关推荐

Lua中pcall与xpcall的用法

pcall 和 xpcall的用法 1.pcall --[[ (flag, ret) pcall(func, args...) 参数: func:调用函数 args:func所需参数,为不定长 返回值: flag:调用成功与否,bool值 ret:当flag为true时,ret为func的返回值。当flag为false时,ret为errmsg ]] -- 无报错 local func = function(arg1, arg2) print(arg

bleachpingzi的专栏 2584

Lua热更新技术中级篇

 本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。       本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。           《lua中级篇》分为:“函数的进阶”、“字符串进阶”、“Table进阶”、“元表”、“OOP面向对象”、“协同程序”、“IO操作”、“调试与运行”等八个大的章节,详细深入讲解lua开发的方方面面。        内容包含lua可变参数、闭包、模块、函数尾调用、字符串模式匹配、字符串不变性原理、矩阵、链表、元表详解与应用、协同的生命周期与生产消费者问题、lua文件各种读写操作、lua执行外部代码与错误异常处理垃圾收集机制等。       最后,lua中级篇的学习,对于广大学员开发商业级lua热更新技术,具有不可替代的重要作用! 热更新系列(技术含量:中高级):B:《热更新框架设计之Xlua基础视频课程》https://edu.youkuaiyun.com/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.youkuaiyun.com/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.youkuaiyun.com/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.youkuaiyun.com/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.youkuaiyun.com/course/detail/27136 

(8)机器人动力学

机器人是一个具有多输入多输出的复杂动力学系统,存在严重的非线性,需要非常系统的方法对机器人进行动力学研究。常用的机器人动力学建模方法有:Lagrange(拉格朗日)动力学方法、Newton-Euler(牛顿-欧拉)动力学方法、Gauss(高斯)动力学方法、Kane(凯恩)动力学方法等。机器人动力学研究的是机器人的运动和作用力之间的关系。机器人的动力学问题包括动力学正问题和动力学逆问题。动力学正问题是对于给定的关节驱动力......

rouyu308的博客 9498

lua xpcall基本用法

xpcall有两个参数(处理的函数,函数异常的处理) 类似java中的try --- catch 不会终止程序的继续运行 函数没有异常 则不会调用 处理异常的方法 function traceback(err) print("LUA ERROR: " .. tostring(err)) print(debug.traceback()) end local function main() self:hello() --function is null print("hello") .

hjssss的博客 6268

uniapp原生安卓插件开发之路

声明: 我的功能需求:全局悬浮框,也就是在其他应用上依旧能悬浮。查遍uni文档,无法实现,甚至native.js也无法实现,无奈只能走上原生插件开发这条不归路了。(吐槽:天天写前端js,突然写了下android简直要炸,public static String啥的,var不香嘛,不过别人严谨肯定还是有别人道理的,加油吧,争取能入个门!) 本人不懂安卓开发,完全安卓小白,所以安卓方面可能表达的不是很好,安卓代码可能写的不优美,但我功能最终还是实现了。但是为了需求,能力总能被“逼”出来。有描述错误的还望指正

Jone's Area 1万+

Agent 长期记忆三代演进:从 RAG 到 Memory Graph,mem0 / Zep / LangMem / Letta 深度横评

文章摘要 2026年,Agent长期记忆技术迎来关键突破,OpenAI、Anthropic等厂商通过扩大上下文窗口和推出记忆工具,推动长期记忆从工程补丁发展为独立技术层。本文通过分析三代记忆架构演进(RAG→结构化Fact→MemoryGraph)和四大方案(mem0/Zep/LangMem/Letta)的8维度横评,揭示以下核心观点: 长上下文≠长期记忆:128K上下文如同RAM,仍需硬盘式记忆层筛选和结构化存储,避免“Context Rot”导致的准确率下降。 三代架构演进: Gen1(RAG):向量检

LDZKKJ的博客 1417

浅析lua异常捕获处理机制

异常捕获是高级语言的一大特性,通过对异常的捕获和处理,可以有效提高系统的稳定性和健壮性。因为无论再怎样改进代码,都不可避免出现一些异常,例如文件io错误、网络错误、内存错误等等,就要求编码对错误进行捕获,同时打印日志以便开发人员跟进问题的处理。当然,lua也提供了接口用于捕获运行时异常。 lua异常捕获函数 lua有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保...

ve12345的博客 2321

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

在执行lua脚本时如何统一捕获异常

相信很多lua开发者都知道,在lua里面,可以使用pcall函数来捕获异常,但pcall只能捕获函数执行过程中抛出的异常,如果我想捕获整个脚本执行过程中的异常呢?方法也是有的,我们可以使用loadfile这个函数来实现,并且需要加多一个入口脚本。业务脚本(hello_world.lua)-- 使用error函数抛出一个异常 error({code = 10001, msg = "发生错误了!"})

IT部落格 5096

ENSP实验一:防火墙基础配置

配置client(内网)、FTP Server(外网)的IP地址。进入防火墙,输入密码:默认为admin@123。

Carohuan的博客 1万+

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 467

lua android异常捕获,Lua之异常捕获

如果需要在 Lua 中处理错误,必须使用函数 pcall(protected call)来包装需要执行的代码。 pcall 接收一个函数和要传递给后者的参数,并执行,执行结果:有错误、无错误;返回值 true 或者或 false, errorinfo。pcall本质上是使用“保护模式”来运行第一参数,因此可以捕获运行过程中的错误。给一个Cjson的例子:local json = require("...

weixin_28224217的博客 403

Verilog流水线CPU设计(超详细)

快把这一篇给更了

Ace Cheney的博客 7万+

使用lua实现try-catch异常捕获

使用lua实现try-catch异常捕获

10年职场两茫茫,35岁凄凉奈若何 486

点云从入门到精通技术详解100篇-基于三维点云的机器人抓取位姿检测(续)

集到的深度信息会存在噪点,因此需要将生成的场景点云进行预处理,获得平滑、降采样处理场景点云,本文设计的预处理操作更能从冗杂的场景点云中提取清晰、平滑的目标点云,便于后续的抓取位姿采样,提高后续算法的处理效率。因此需要对场景点云进行适当的分割,仅保留目标物体的点云,整个过程可以通过。场较小时,空间中的点云密度会更加提高;觉子系统的效率,再保持全局点云几何形状不改变的前提下,通过对目标点云进行。体素降采样可以快速地减少点云数据并同时保持点云的形。个点,由于我们实施抓取的目标物体只占整个场景点云图的一部分,

getusushu的博客 773

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lua android异常捕获,使用lua实现try-catch异常捕获

lua原生并没有提供try-catch的语法来捕获异常处理,但是提供了pcall/xpcall等接口,可在保护模式下执行lua函数。因此,可以通过封装这两个接口,来实现try-catch块的捕获机制。我们可以先来看下,封装后的try-catch使用方式:try{-- try 代码块function ()error("error message")end,-- catch 代码块catch{-- 发...

weixin_39567870的博客 410

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

lua异常捕获

解析json失败,想要捕获异常,可以使用pacll local cjson = require("cjson") local str = '[{"name":"fjd","age":110},{"date":"2017-04-25","age":111,"name":"wyc"}]' local err,tbl = pcall(function(str)return cjs...

weixin_30763455的博客 836

lua系统学习15-捕获和异常

Package.loadlib 参数:动态库的完整路径和一个函数名称。 loadlib函数加载指定的库,并没有调用库中的任何函数,它会将一个c函数作为Lua函数返回。 在Unity中使用Lua 这个方法很常用 通常使用require来加载c程序块 ,这个函数会搜索指定的库,然后用loadlib来加载库,并返回初始化函数。这个初始化函数应将库中提供的函数注册到lua中,就好像一段lua代码定义了其他的函数一样。 处理错误 if not n then error(“message”) end 当n为假的时候 抛

Miracle的博客 1342

unity3d中的lua脚本异常捕获

unity3d中的lua脚本异常捕获

骑着蜗牛找马儿 2801

Lua 外部代码的加载和异常捕获

--编译与运行Lua外部代码块有三种形式: --loadfile 编译Lua外部代码块,但不会运行代码,将会以函数的形式返回编译结果。 --dofile 直接编译运行Lua外部代码块,并不返回任何结果。Dofile是loadfile 的进一步简化封装。 --load 编译字符串中的代码,而非从文件读取。 --[[--使用“loadfile"函数,调用lua外部脚本]] --[[ local...

m0_37981386的博客 489

Lua实现Try Catch捕获异常

Lua实现Try Catch捕获异常

GA博客 3343
上一篇: Visual Studio Code 连接远程服务器
下一篇: Lua协程分析第一篇
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值