Michael Chirico
2023-Aug-10 03:01 UTC
[Rd] Improving user-friendliness of S4 dispatch failure when mis-naming arguments?
I fielded a debugging request from a non-expert user today. At root was running the following: dbGetQuery(connection = conn, query = query) The problem is that they've named the arguments incorrectly -- it should have been [1]: dbGetQuery(conn = conn, statement = query) The problem is that the error message "looks" highly confusing to the untrained eye: Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ?dbGetQuery? for signature ?"missing", "missing"? In retrospect, of course, this makes sense -- the mis-named arguments are getting picked up by '...', leaving the required arguments missing. But I was left wondering how we could help users right their own ship here. Would it help to mention the argument names? To include some code checking for weird combinations of missing arguments? Any other suggestions? Mike C [1] https://github.com/r-dbi/DBI/blob/97934c885749dd87a6beb10e8ccb6a5ebea3675e/R/dbGetQuery.R#L62-L64
Hadley Wickham
2023-Aug-10 13:46 UTC
[Rd] Improving user-friendliness of S4 dispatch failure when mis-naming arguments?
Hi Michael, I can't help with S4, but I can help to make sure this isn't a problem with S7. What do you think of the current error message? Do you see anything obvious we could do to improve? library(S7) dbGetQuery <- new_generic("dbGetQuery", c("conn", "statement")) dbGetQuery(connection = NULL, query = NULL) #> Error: Can't find method for generic `dbGetQuery(conn, statement)`: #> - conn : MISSING #> - statement: MISSING Hadley On Wed, Aug 9, 2023 at 10:02?PM Michael Chirico via R-devel <r-devel at r-project.org> wrote:> > I fielded a debugging request from a non-expert user today. At root > was running the following: > > dbGetQuery(connection = conn, query = query) > > The problem is that they've named the arguments incorrectly -- it > should have been [1]: > > dbGetQuery(conn = conn, statement = query) > > The problem is that the error message "looks" highly confusing to the > untrained eye: > > Error in (function (classes, fdef, mtable) : unable to find an > inherited method for function ?dbGetQuery? for signature ?"missing", > "missing"? > > In retrospect, of course, this makes sense -- the mis-named arguments > are getting picked up by '...', leaving the required arguments > missing. > > But I was left wondering how we could help users right their own ship here. > > Would it help to mention the argument names? To include some code > checking for weird combinations of missing arguments? Any other > suggestions? > > Mike C > > [1] https://github.com/r-dbi/DBI/blob/97934c885749dd87a6beb10e8ccb6a5ebea3675e/R/dbGetQuery.R#L62-L64 > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- http://hadley.nz