lua 脚本处理运算常见报错类型
在工作中遇到过这样一个问题。在系统中生成单号程序使用了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、字符串拼接个数限制
相关文章
Golang 中的零值 Nil
发布时间:2023/04/27 浏览次数:166 分类:Go
-
本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。