将 LuaSQL 错误捕获到 xpcall 错误处理函数
Catch the LuaSQL error to the xpcall error handler function
如何像 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
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)
如何像 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
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)