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.

  • 相关阅读:
    前路漫长
    OEL6 /boot分区删除恢复
    区块链:剖析工作量证明
    【转】区块链:Schnoor签名究竟是什么
    使用 Hyperledger Fabric 开展私密交易
    Sovrin:技术落地可期,但推广难度较高
    白硕:区块链技术与数据隐私(附视频)
    从入门到精通零知识证明与zkSNARK
    区块链安全:匿名性以及隐私性
    朋友去面试Python工程师,又带回来几道基础题,Python面试题No10
  • 原文地址:https://www.cnblogs.com/jadeboy/p/3978661.html
Copyright © 2011-2022 走看看