19.错误(error)
Lua所遇到的任何未预期条件都会引发一个错误。因此在发生错误时不能简单的崩溃或着退出,而是结束当前程序块并返回应用程序。当错误引发时进行恰当的处理是最合适的,然而这个阶段伴随着错误的捕获、错误的处理、错误追溯等处理。Lua中有函数pcall、error、assert函数来操作错误。其中pcall用于捕获错误、error抛出一个错误、assert是error的包装
抛出错误
在Lua中抛出错误信息的函数是error,通常包含调用堆栈信息以及错误提示信息。而assert是error的包装,它有两个参数可选,第一个参数 如果返回false,那么就引发错误,抛出错误提示信息第二个参数。因此使用assert要比error更为简便。
两种方式都是可以的,而且可以自定义错误信息,简便快捷的跟踪错误位置及错误模块。
function add(a,b)return a+b
endadd(10)
lua.exe: …sers/Administrator/IdeaProjects/untitled1/Error2.lua:2: attempt to perform arithmetic on local ‘b’ (a nil value)
stack traceback:
…sers/Administrator/IdeaProjects/untitled1/Error2.lua:2: in function ‘add’
…sers/Administrator/IdeaProjects/untitled1/Error2.lua:5: in main chunk
[C]: ?
02.错误处理
们可以使用两个函数:assert 和 error 来处理错误。实例如下:
local function add(a,b)assert(type(a) == "number", "a 不是一个数字")assert(type(b) == "number", "b 不是一个数字")return a+b
end
add(10);
--实例中assert首先检查第一个参数,若没问题,assert不做任何事情;否则,assert以第二个参数作为错误信息抛出。
lua.exe: …sers/Administrator/IdeaProjects/untitled1/Error2.lua:3: b 不是一个数字
stack traceback:
[C]: in function ‘assert’
…sers/Administrator/IdeaProjects/untitled1/Error2.lua:3: in function ‘add’
…sers/Administrator/IdeaProjects/untitled1/Error2.lua:6: in main chunk
[C]: ?
01.error
error(message [, level])
- 功能:终止正在执行的函数并返回消息的内容作为错误信息,通常情况error会附加一些错误位置的信息到message的头部。
- 参数:
- level 指示获得错误的位置
- level=0 不添加错误位置信息
- level=1 默认为调用error位置,形式为文件+行号
- level=2 指出哪个调用error的函数的函数
02.assert
assert(v [, message])
– v 检查是否有错误,当为false或nil时抛出错误。
–message 可选 错误信息,当检查出有错误是抛出的信息,默认值为assertion failed!
断言就是用于在代码中捕捉这些假设,可将断言看做是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中某个特定点,该表达式值为真。可以在任何时候启用和禁用断言验证。因此可在测试时启动断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题是可重新启用断言。断言只有在debug模式下才有效。
03.pcall()
在Lua中处理错误,必须使用函数pcall(protected call)来包装需要执行的代码。pcall接收一个函数和要传递给后者的参数并执行。
pcall以一种“保护模式”来调用第一个参数,可同时捕获函数执行中的任何错误和异常。若被执行函数一切正常,pcall返回true以及被执行函数函数的返回值,否则返回nil和错误信息。也就是说成功仅仅有一个返回值,而失败则有两个返回值。
call接收一个函数和要传递给后者的参数,并执行,执行结果:有错误、无错误;返回值true或者或false, errorinfo。
04.通常在错误发生时,希望获得更多的调试信息,而不只是发生错误的位置。但pcall返回时已经销毁了调用栈的部分内容,Lua提供了xpcall来实现这个功能。
xpcall(func, handler)
Lua提供了xpcall函数接收的第二个参数是一个错误处理的函数,当错误发生时,Lua会在调用栈展看unwind前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息。
debug库提供了两个通用的错误处理函数:
debug.debug 提供一个Lua提示符让用户来处理错误的原因
debug.traceback 根据调用栈来构建一个扩展的错误消息
19.错误(error)相关推荐
- TensorRT升级错误,plugins/poly_layer.h:19:21: error: looser throw specifier for ‘virtual int nvinfer1::
在将tensorrt由7升级到8的过程中,遇到了如下错误 In file included from plugins/poly_layer.cpp:1:0: plugins/poly_layer.h: ...
- html5网站 500.19错误,WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决?...
WIN7操作系统创建IIS后浏览时提示HTTP500.19错误是怎么回事?如何解决? 作者:兴邦开发部 人气: 发表时间:2015年05月18日 [文章内容简介]:WIN7操作系统创建IIS后浏览时提 ...
- 配置网站之后500.19错误
HTTP错误 500.19 - Internet Server Error 无法访问请求的页面,因为该页的相关配置数据无效. IIS,出现这个错误 怎么回事? -------------------- ...
- index.tsx:19 Uncaught Error: A <Route> is only ever to be used as the child of <Routes> element, nev
今天做练习react路由出现错误,index.tsx:19 Uncaught Error: A is only ever to be used as the child of element, nev ...
- c语言错误2064,VC错误: error C2064: term does not evaluate to a function
VC错误: error C2064: term does not evaluate to a function0 grcfhl2013.11.03浏览34次分享举报 一个求矩形,圆形,三角形的面积的程 ...
- java初始化虚拟机错误_异常 - 虚拟机初始化错误 - Error occurred during initialization of VM...
1 环境配置信息 1.1 服务器配置信息 服务器是物理机, 配置信息如下: CPU型号 CPU个数 CPU核数 CPU线程数 内存 Intel(R) Xeon(R) CPU E5-2630 v4 @ ...
- Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题 参考文章: (1)Visual Stdio VS 错误 err ...
- Jenkins的错误“error fetching remote repo origin”的问题解决
Jenkins的错误"error fetching remote repo origin"的问题解决 参考文章: (1)Jenkins的错误"error fetching ...
- mysql 错误1136_mysql,_MySQL错误:Error Code: 1136,mysql - phpStudy
MySQL错误:Error Code: 1136 我有一张数据表,表结构如下: CREATE TABLE IF NOT EXISTS `icy_car` ( `car_id` bigint(20) N ...
- 错误 error C2220: 警告被视为错误 - 没有生成“object”文件
VS2017编译报错: 错误如下: 错误 error C2220: 警告被视为错误 - 没有生成"object"文件 解决方案: 方法:选中项目->右击->选择[属性] ...
最新文章
- oracle同时更新多列数据,ORACLE 11G 表联合更新多列
- php执行zip压缩,PHP执行zip与rar解压缩方法实现代码
- Java反射 field
- fedora 19 gnome 3.8 关闭笔记本盖子的动作
- 美食博主整本菜譜全記錄
- 设置文本输入框光标位置,兼容ie,w3c
- 下载各种在线视频及字幕
- gitlab 远程仓库回退到指定版本
- container html css,splitcontainer
- 数据挖掘 文本分类(四)批处理分词
- mysql 给库赋权,Mysql数据库安装、赋权
- 华为商城抢购插件_有赞商城社群接龙全面上线,社群营销玩法升级
- 领先招聘和支付平台Deel筹资1.56亿美元,成为独角兽企业
- 计算机不学c语言的专业,关于高职计算机类专业学生学不好C语言的思考
- 具备3-5年工作经验的软件测试工程师,工资大概多少?
- Modern GMT Series:Slice in 3D View (三维切片图)
- 施工部署主要不包括_施工管理目标是单位工程施工部署的重要内容,其目标不包括()。A.质量目标B.社会行为目标C.工期目标...
- android 普通蓝牙源码解读
- 如何导出:swc、swf、fla内的声音文件
- 啃完这些 Spring 知识点,我竟吊打了阿里面试官(附面经 + 笔记)
热门文章
- 新概念英语第一册(27)
- jupyter notebook字体、颜色配置
- 华为nova3i能用鸿蒙吗,华为Nova3支持红外功能吗 Nova 3支持NFC功能吗
- SpringCloud之Zuul网关服务
- 如何拼接多张图片?推荐三种方法!
- js禁用tab键\Enter键
- android ANR
- 为末日做准备:谷歌推出僵尸生存地图
- org.springframework.util.xml.SimpleSaxErrorHandler warning org.xml.sax.SAXParseException; systemId:
- 专注创新 共创未来——2021南大通用产品发布暨生态合作伙伴大会成功举办