Exception handling 如何正确调用lua解释器中的异常

Exception handling 如何正确调用lua解释器中的异常,exception-handling,lua,Exception Handling,Lua,我正在使用Lua5.1 我希望lua计算失败,如果我试图将一个数字除以零,将零值提高到负幂,或将模乘以零,则打印一个错误 我所做的是改变计算定义,从这样的东西 #define luai_numdiv(L,a,b) ((a)/(b)) inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){ if(b != cast_num(0)) return (a)/(b); else

我正在使用Lua5.1

我希望lua计算失败,如果我试图将一个数字除以零,将零值提高到负幂,或将模乘以零,则打印一个错误

我所做的是改变计算定义,从这样的东西

#define luai_numdiv(L,a,b)  ((a)/(b))
inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){
    if(b != cast_num(0))
        return (a)/(b);
     else
        luaD_throw(L, LUA_ERRRUN);
     }
像这样的事情

#define luai_numdiv(L,a,b)  ((a)/(b))
inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){
    if(b != cast_num(0))
        return (a)/(b);
     else
        luaD_throw(L, LUA_ERRRUN);
     }
这根本不起作用。我相信这与luaD_Throw是一种不恰当的方式,导致lua计算失败有关


如何正确地使lua中的计算失败?

您的代码正常工作。它只是不发出任何错误消息

尝试在luaD-throw(L,lua-ERRRUN)之前添加
lua-pushliteral(L,“除零”)


或者使用
luaG\u-runerror(L,“除零”)
而不是
luaD\u-throw(L,LUA\u-ERRRUN)
来获得更详细的错误消息。

这是否也适用于常量折叠?由于我在执行c=5/0时收到错误消息,而在a=5B=0C=a/b感兴趣时没有收到错误消息,因此我从未见过这些函数。为什么不是luaL_误差或lua_误差?常数折叠显式避免被零除。请参阅
lcode.c
中的
constfolding
。内核不调用
lua\u error
lua\u error
,因为它必须进行一些清理。您确定使用的是lua 5.1吗<5.1中的code>luai_numdiv未收到
L
。在5.2中是这样的。我手动添加了它。无论它在哪里被使用。