【问题标题】:Catch the LuaSQL error to the xpcall error handler function将 LuaSQL 错误捕获到 xpcall 错误处理函数
【发布时间】:2021-08-05 18:14:09
【问题描述】:

如何像 assert 一样从 LuaSQL 驱动程序获取错误输出作为 xpcall error 函数的参数?

例如,通过运行以下代码:

local conn =  assert (env:connect("demo_database",config.db.username,config.db.password,config.db.host))

我收到以下错误:

LuaSQL: error connecting to database. MySQL: Access denied for user 'user_1'@'host1' (using password: YES)

但是当我运行以下代码时:

local function myerrorhandler( err )
    local file = assert( io.open( "/tmp/testout.txt", "w" ) )
    file:write( err.." - error\n" )
    file:close()
end

local conn = xpcall (env:connect("demo_database",config.db.username,config.db.password,config.db.host), myerrorhandler)

我在日志文件中得到的错误是:attempt to call a nil value - error

【问题讨论】:

    标签: lua luasql


    【解决方案1】:

    xpcall 期望第一个参数是一个函数,它将调用并从中捕获错误。你基本上是在做xpcall(func(), handler),即调用func,而不是仅仅将它传递给xpcall,类似于pcall 期望一个函数作为第一个参数。

    您基本上想将代码包装在一个函数中:

    local conn = xpcall(function()
        return env:connect("demo_database", config.db.username, config.db.password, config.db.host)
    end, myerrorhandler)
    

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多