Stop (nu)

Defensief programmeren in R

Dr. Colin Gillespie

Jumping Rivers

Ik zag het teken

Soms gaat er gewoon iets stuk

  • We moeten een fout geven

Bijvoorbeeld:

1 + "stuff"
Error in 1 + "stuff": non-numeric argument to binary operator
Defensief programmeren in R

Stop nu meteen, dank je wel

Een fout geef je met stop()

stop("A Euro 1996 error has occurred")
# Error: A Euro 1996 error has occurred
conf_int <- function(mean, std_dev) {
   if(std_dev <= 0) 
       stop("Standard deviation must be positive")

   c(mean - 1.96 * std_dev, mean - 1.96 * std_dev)
}
Defensief programmeren in R

Vang ze zodra het kan

  • Je kunt fouten niet onderdrukken (of negeren)
    • Een fout betekent dat R niet verder kan
    • In plaats daarvan vangen we fouten af

Defensief programmeren in R

De functie try()

De functie try() lijkt een beetje op suppress()

res <- try("Scotland" + "World cup", silent = TRUE)

Ze probeert iets uit te voeren; lukt dat niet, dan gaat ze door

Defensief programmeren in R

De try()-idioom

res <- try("Scotland" + "World cup", silent = TRUE)
res
[1] 'Error in "Scotland" + "World cup": non-numeric argument to binary operator'
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in "Scotland" + "World cup": 
                            non-numeric argument to binary operator>
Defensief programmeren in R

De try()-idioom

result <- try("Scotland" + "World cup", silent = TRUE)
class(result)
[1] "try-error"
if(class(result) == "try-error")
  ## Doe iets nuttigs
Defensief programmeren in R

Laten we oefenen!

Defensief programmeren in R

Preparing Video For Download...