首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LuaSQL错误捕获到xpcall错误处理函数

将LuaSQL错误捕获到xpcall错误处理函数
EN

Stack Overflow用户
提问于 2021-08-05 18:14:09
回答 1查看 38关注 0票数 1

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

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

代码语言:javascript
复制
local conn =  assert (env:connect("demo_database",config.db.username,config.db.password,config.db.host))

我得到以下错误:

代码语言:javascript
复制
LuaSQL: error connecting to database. MySQL: Access denied for user 'user_1'@'host1' (using password: YES)

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 18:15:29

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

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

代码语言:javascript
复制
local conn = xpcall(function()
    return env:connect("demo_database", config.db.username, config.db.password, config.db.host)
end, myerrorhandler)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档