2

这个函数不能正确关闭连接(所以我达到了 16 的最大限制,这显然不好):

query.test = function(query) {
  con = dbConnect(MySQL(), groups = 'test')
  output = tryCatch({
    dbGetQuery(con, query)
    }, warning = function(w) {
      print(w)
    }, error = function(e) {
      print(e)
    }, finally  = function() {
      dbDisconnect(con)
    })
  return(output)
}

我认为子句中的finally语句总是被执行,所以我不清楚为什么这段代码不起作用。

4

1 回答 1

3

答案原来是有点奇怪(对我来说)R 语法:

query.test = function(query) {
  output = tryCatch({
    con = dbConnect(MySQL(), groups = 'test')
    dbGetQuery(con, query)
    }, warning = function(w) {
      print("warning!")
    }, error = function(e) {
      print("error encountered!")
      print(e)
    }, finally = {
      dbDisconnect(con)
      print("goodbye")
    })  
  return(output)
}

这里的区别是:

}, finally  = function() {
      dbDisconnect(con)
    })

应该

}, finally  = {
      dbDisconnect(con)
    })

如果有人了解为什么finally第一种方式不起作用,我会很高兴听到它。

于 2013-01-25T19:58:00.787 回答