迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

lua 脚本处理运算常见报错类型

作者:迹忆客 最近更新:2022/12/26 浏览次数:

在工作中遇到过这样一个问题。在系统中生成单号程序使用了redis存储数据。主要是存储当前每个单据最大单号。为了存储方便我在程序中使用了lua脚本来处理这些数据。主要逻辑是先取出某一个单据的最大值,然后加一。 某时直接通过redis客户端直接修改了这个值,将其修改成了一个字符串。所以系统中报错

ERR Error running script (call to f_500b1f366923e96988198e7341f2d2775cb59ead): 
@user_script:6: user_script:6: attempt to perform arithmetic on local 'number' (a string value) {"exception":"[object] (Predis\\Response\\ServerException(code: 0): 
ERR Error running script (call to f_500b1f366923e96988198e7341f2d2775cb59ead): 
@user_script:6: user_script:6: attempt to perform arithmetic on local 'number' (a string value) at /home/op/vendor/predis/predis/src/Client.php:370)

这是lua脚本报出来的错误 是说对变量 number进行运算的时候出现了问题。因为在脚本中直接是 number = number+1; 此时number已经被客户端修改成了字符串,所以上述加法操作就报错了。

对于Lua常见lua报错类型

一、索引nil值

1 attempt to index a nil value (global 'a')

a.name = "haha"

2、attempt to index a nil value (field 'name')

a.name.first = "haha"

3、attempt to perform arithmetic on a nil value (global 'a')

a=nil
print(a+1)

二、数学计算,逻辑运算中有nil值

4、attempt to perform arithmetic on a nil value (global 'a')

a=nil
print(a+1)

5、attempt to perform bitwise operation on a nil value (global 'a')

a=nil
print(a & 1)

6、attempt to perform arithmetic on a nil value (field 'b')

a = {}
print(a.b &1)

三、调用nil值

7、attempt to call a nil value (global 'a')

a=nil
a()

8、attempt to call a nil value (field 'b')

a={}
a.f()

四、数学计算、位运算中使用非数字类型

9、attempt to perform arithmetic on a string value (global 'a')

a="str"
print(a+1)

10、attempt to perform arithmetic on a table value (global 'a')

a = {}
print(a+1)

11、attempt to perform arithmetic on a string value (field 's')

a = {s="str"}
print(a.s + 1)

12、attempt to perform arithmetic on a table value (field 's')

a = {s={}}
print(a.s + 1)

五、数量限制

1、stack overflow (函数调用栈超限 LUAI_MAXSTACK 1000000)

function a() b() end
function b() a() end
a()

2、upvalue数量限制

3、参数个数限制

4、局部变量个数限制

5、字符串拼接个数限制

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Golang 中的零值 Nil

发布时间:2023/04/27 浏览次数:166 分类:Go

本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便