zoukankan      html  css  js  c++  java
  • lua以xpcall实现try/catch功能

    -- 打印错误信息
    local function __TRACKBACK__(errmsg)
        local track_text = debug.traceback(tostring(errmsg), 6);
        print("---------------------------------------- TRACKBACK ----------------------------------------");
        print(track_text, "LUA ERROR");
        print("---------------------------------------- TRACKBACK ----------------------------------------");
        local exception_text = "LUA EXCEPTION
    " .. track_text;
        return false;
    end
    
    --[[ 尝试调一个function 这个function可以带可变参数
    如果被调用的函数有异常 返回false,退出此方法继续执行其他代码并打印出异常信息;]]
    function trycall(func, ...)
        local args = { ... };
        return xpcall(function() func(unpack(args)) end, __TRACKBACK__);
    end
    --测试代码:
    
    trycall(function(param)
          print("message "..param)
          print("message "..nil)
            end, "test trycall")
    
    
    
    

    ##输出结果如下:

    >lua -e "io.stdout:setvbuf 'no'" "itertor_test.lua"  message test trycall ---------------------------------------- TRACKBACK ---------------------------------------- itertor_test.lua:45: attempt to concatenate a nil value stack traceback: itertor_test.lua:43: in main chunk [C]: ? LUA ERROR ---------------------------------------- TRACKBACK ---------------------------------------- >Exit code: 0

    
    

    xpcall (f, err)

    This function is similar to pcall,except that you can set a new error handler.

    xpcall calls function f in protected mode,using err as the error handler.Any error inside f is not propagated;instead, xpcall catches the error,calls the err function with the original error object,and returns a status code.Its first result is the status code (a boolean),which is true if the call succeeds without errors.In this case, xpcall also returns all results from the call,after this first result.In case of any error,xpcall returns false plus the result from err.

  • 相关阅读:
    java timer 指定某时间点执行
    java jdbc 同时操作查询删除操作
    java ResultSet获得总行数
    c# 根据枚举Value 获得名称
    c# 备份数据
    MySQL主从集群搭建
    单机安装MySQL多实例
    2019年度总结
    go goroutine id
    go语言中 json转换--nil
  • 原文地址:https://www.cnblogs.com/yylingyao/p/6747594.html
Copyright © 2011-2022 走看看