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

在工作中遇到过这样一个问题。在系统中生成单号程序使用了redis存储数据。主要是存储当前每个单据最大单号。为了存储方便我在程序中使用了脚本" title="lua脚本">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)

functiona() b() end

functionb() a() end

a()

2、upvalue数量限制

3、参数个数限制

4、局部变量个数限制

5、字符串拼接个数限制

本文转载自:迹忆客(https://www.jiyik.com)

以上是 lua 脚本处理运算常见报错类型 的全部内容, 来源链接: utcz.com/z/290206.html

回到顶部