Эта функция не закрывает соединения должным образом (поэтому я достигаю максимального предела 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
всегда выполняются, поэтому мне непонятно, почему этот код не работает.
Ответ оказывается немного странным (для меня) 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
, не работает первый способ, я был бы признателен за это.
warning
и error
ожидают «обработчики», то есть функции, в то время как, finally
, ожидает только выражение. Сканируя документацию, мне кажется разумным, что это может быть несколько яснее в этом вопросе, я полагаю.