19.错误(error)

news/2024/11/8 16:35:15/

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 根据调用栈来构建一个扩展的错误消息
在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/806483.html

相关文章

解决:发生系统错误 5;拒绝访问!

在dos下运行net命令或其它!提示发生系统错误 5;拒绝访问! 这是因为权限不够的问题。 首先,不要以为用admin account登录系统后,用ctry R --> cmd,就有管理权限; 此时,只是user…

第一章 一般错误信息 - 错误代码 0 到 99

文章目录 第一章 一般错误信息 - 错误代码 0 到 99一般错误信息错误代码 0 到 99 第一章 一般错误信息 - 错误代码 0 到 99 一般错误信息 错误代码被报告为 ERROR #nnn。这些错误代码有时称为 %Status 错误代码。 可以使用 DisplayError() 和 Error() 方法确定指定错误代码的…

错误代码9

自己在写从文件循环读每个句子的时候出现问题 错误1: fopen(/home/xbwang/Desktop/scen_test_sim.csv,r) while True:linef.readline()if lineNone:breakaline.strip().split(",")[1:]if len(a) > 10:flag 0for i in range(10):flag flag 1con a[i]…

透彻理解 UART 通信的基本方法

UART是一种异步全双工串行通信协议,由 Tx 和 Rx 两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

3.9.错误处理的理解以及错误的传播特性

目录 前言1. thrust2. error总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习精简 CUDA 教程-错误处理的理解以及错误的传播…

分时系统用户可以独占计算机资源,资源共享分时系统

分时系统(time-sharing)是利用多重程序(Multiprogramming)与多任务处理(multitasking)等技术,让多个用户在同时间内可以分享相同的计算机资源。共享资源分时系统除了具有分时系统基本特征以外,强调资源共享性,资源共享不只包括CPU和软件资源,还包括数据等一些其它资源。 中…

计算机网络的重要准则是,计算机网络技术的应用

计算机网络技术的应用 高宝玲 西安思源学院陕西西安710000 摘要:基于当今时代背景下,计算机网络技术不断发展,于多个领域中具有的应用范围越来越广,并逐渐渗透进了人们的日常生活、学习以及工作当中,对人们的影响越来越…

833计算机考研,西电考研辅导班:2019西安电子科技大学833计算机学科专业基础综合考试大纲...

833“计算机学科专业基础综合”复习参考提纲 一、 考察目标 计算机学科专业基础综合考试涵盖数据结构和计算机组织与体系结构等学科专业基础课程。要求考生比较系统地掌握上述专业基础课程的基本概念、基本原理和基本方法,能够综合运用所学的基本原理和基本方法分析…