Lua | 错误处理

C++调用lua函数及lua_pcall的错误处理示例 看过上一篇文章lua与C++交互—配置文件就知道C++是怎么获取lua里边的变量了,实际上用C++调用lua函数也与此类似。首先要获得lua函数的地址,然后我们通过栈将函数需要的参数传递给lua,然后运行该函数,函数会将运行结果压入栈,我们再从栈中取出结果即可。 一、定义lua函数 在lua文件里面我们写一个简单的加法函数。 //config.lua文件内容 function myadd(a,b)... 阅读详情

Lua | 错误处理

1. 错误分类

1.1. 语法错误

不符合Lua语法要求的错误,只能由人工修复。

local a == 1

错误提示

lua53: error.lua:1: unexpected symbol near '=='

1.2. 运行时错误

运行时产生的错,一般像索引越界、变量不是预期的值…

function sum(a, b)
    return a + b
end

local a = 1
local b = 2

a = true

print(sum(a, b))

错误提示:

C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a')
stack traceback:
        .\error.lua:2: in function 'sum'
        .\error.lua:11: in main chunk
        [C]: in ?

2. 错误处理函数

2.1. assert

assert(v, message)

一般用于检查变量值是否是预期

local a = 1;

assert(type(a) == "boolean", "a不是boolean类型")

错误提示:

C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:3: a不是boolean类型
stack traceback:
        [C]: in function 'assert'
        .\error.lua:3: in main chunk
        [C]: in ?

2.2. error

error(message [, level])

level:

  • level=1(默认):为调用error位置(文件+行号)
  • level=2:指出哪个调用error的函数的函数
  • level=0:不添加错误位置信息
error("this is error message");

错误提示:

C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:1: this is error message
stack traceback:
        [C]: in function 'error'
        .\error.lua:1: in main chunk
        [C]: in ?

2.3. pcall

检测方法执行过程中是否遇到运行时错误

function sum(a, b)
    return a + b
end

function main(a, b)
    print(sum(a, b))
end

local ok, errInfo = pcall(main, true, 2)
if ok then
    print("没有错误")
else
    print("碰到错误:" .. errInfo)
end

错误提示:

碰到错误:.\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a')

2.4. xpcall

pcall可以捕获函数执行中的错误的位置,但是销毁了调栈的部份内容,有时我们需要错误方法的栈调用关系使用xpcall

function sum(a, b)
    return a + b
end

function main(a, b)
    print(sum(a, b))
end

local msgh = function(err)
    print(err)
    print(debug.traceback())
end

local status = xpcall(main, msgh, true, 2)
print(status)

错误提示:

.\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a')
stack traceback:
        .\error.lua:11: in metamethod '__add'
        .\error.lua:2: in function 'sum'
        .\error.lua:6: in function 'main'
        [C]: in function 'xpcall'
        .\error.lua:14: in main chunk
        [C]: in ?
false

3. 参考

Lua 编译执行和错误处理 Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。 阅读详情

相关推荐

Lua错误处理与调试

Lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,Lua会在调用桟展看(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。使用简单的命令以及其它调试设置,用户可以检阅全局变量和局部变量, 改变变量的值,计算一些表达式,等等。在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。如果函数没有那个上值,返回 nil 否则,返回该上值的名字。

悦分享 1409

Lua 运行时报:lua unexpected symbol near ‘▒‘ 的问题解决

解决因脚本格式错误运行报错的问题

Kayn_Liu的博客 9200

《数据结构》04-树4 是否同一棵二叉搜索树

题目 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要...

叫我皮卡丘 2012

unexpected symbol near.....执行报错处理,lua开发

先看这个报错,根据这个报错信息意思就是第四行的某个符号出错再看看代码反复检查,没有什么奇怪的地方啊。。。然后再想想。。。python中有严格的缩进机制,缩进有问题也会报错,试试呗,把第四行的缩进删除,第七行的缩进删除,编译通过~~好吧,就是这个问题了、、、...

qq_38748943的博客 3万+

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 410

.lua.txt 格式问题 unexpected symbol near

有时候写Lua补丁的时候经常会报unexpected symbol near '<\194>'这样的错误,比如LuaException: error loading module PatchChineseToEnglish from CustomLoader, E:/uniu/Android/Client_Android/UnityClient/Assets/Scripts/XLua/...

王王王渣渣的博客 1万+

因果强化学习:优化决策策略的因果方法

1. 背景介绍 1.1 传统强化学习的局限性 强化学习(Reinforcement Learning, RL)是一种通过与环境交互来学习最优决策策略的方法。然而,传统强化学习方法在面对复杂、动态和不确定的现实世界问题时,往往存在以下局限性: 数据效率低:传统强化学习方法

AI天才研究院 656

Lua 错误处理

Lua 错误处理 程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。 任何程序语言中,都需要错误处理。错误类型有: 语法错误 运行错误 语法错误 语法错误通常是由于对程序的组件(如运算符、表达式)使用不当引起的。一个简单的实例如下: -- test.lua 文件 ...

类人_猿的博客 4248

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1307

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3106

Lua错误处理

错误 Errare humanum est(拉丁谚语:犯错是人的本性)。所以我们要尽可能的防止错误的发生,Lua 经常作为扩展语言嵌入在别的应用中,所以不能当错误发生时简单的崩溃或者退出。相反,当错误发生时 Lua 结束当前的 chunk 并返回到应用中。 当 Lua 遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等(可以通过 metatable...

昔拉的博客 2747

PCB Layout工程师核心能力与实战进阶指南

PCB Layout是电子硬件从原理图到物理实现的关键环节,本质是将电路逻辑转化为受电磁场、热力学与制造工艺约束的三维空间结构。其设计质量直接决定信号完整性(SI)、电源完整性(PI)和电磁兼容性(EMC)等核心性能指标。随着高速接口(如PCIe Gen5、USB3.2)、高密度封装(BGA微间距、HDI)及车规/工业级可靠性要求提升,Layout已从‘连线’演进为多目标协同优化的系统工程。掌握Altium Designer等EDA工具、理解叠层设计与DFM规则、具备SI/PI仿真意识,并能贯通芯片Data

weixin_42589700的博客 86

lua 错误处理

lua 错误处理

weixin_43931625的博客 6740

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 555

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Lua的pcall错误处理

#include "stdafx.h" #include #include #include #include using namespace std; extern "C" { #include "lua.h" #include "lualib.h" #include }; int pcall_callback_err_fun(lua_State* L) { lua_D

双杯献酒的专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

lua中的错误处理

Lua中处理错误,可以使用函数pcall(protected call)来包装需要执行的代码。pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误、无错误;返回值true或者或false, errorinfoif pcall(function_name, ….) then -- 没有错误 else -- 一些错误 end--assert(io.open("nofile"),"thi...

Hahaha_Val的博客 2430

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Lua语言入门 - Lua 错误处理

程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。 任何程序语言中,都需要错误处理。错误类型有: 语法错误 运行错误

qq_40788199的博客 1033

lua学习之错误处理

错误处理 动态链接 在 Lua 中,动态链接被视为所有其他机制的母机制 因此利用它就可以动态地加载任何其他不在 Lua 中的机制 package.loadlib 所需两个参数 库的完整路径 正确的函数名称 loadlib 函数加载指定的库,并将其链接入 Lua 它没有调用库中的任何函数 而是将一个 C 编写的函数作为 Lua 函数返回 如果加载库或查找初始化函数时发...

qq_39149063的博客 514
上一篇: 设计模式:Go适配器模式
下一篇: CentOS:locale错误
yimtcode
博客等级 码龄6年 205粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值