【问题标题】:Use assert with pcall in Lua在 Lua 中使用 assert 和 pcall
【发布时间】:2013-08-16 08:41:48
【问题描述】:

根据是否引发错误,pcall(function) 可能会返回:

成功:true 和函数的返回值。
失败:false和错误。

在我的例子中,我调用一个函数来返回一个表,所以如果没有错误,我将从第二个返回值中获取我的数据,如果出现错误,我将打印管理错误。

我如何使用断言来做到这一点?

起初我是这样写的:

local ret, data = pcall(the_function)
assert(ret, "Error: "..data)
-- use data from here on.

问题是断言消息即使在成功的情况下也会被评估,所以当调用成功时,Lua 会抱怨将字符串与表连接起来。

这个问题是因为我想使用 assert 并引用错误,但避免使用 if not ret then assert(false, "...") end 之类的东西。

【问题讨论】:

    标签: lua


    【解决方案1】:

    试试这个:

    local ret, data = assert(pcall(the_function))
    

    【讨论】:

      【解决方案2】:

      如果您不需要更改来自pcall lhf 的错误消息的建议是最好的。

      否则解决办法是:

      local ret, data = pcall( the_function )
      assert( ret, type( data ) == 'string' and "Error: " .. data )
      

      或者这个,这是一种更清洁的方法:

      local ret, data = pcall( the_function )
      if not ret then error( "Error: " .. data ) end
      

      如果pcall 没有给出错误,则后者完全避免评估错误消息表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 2018-01-29
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        相关资源
        最近更新 更多