Stop (chiar acum)

Programare defensivă în R

Dr. Colin Gillespie

Jumping Rivers

Am văzut semnul

Uneori lucrurile pur și simplu nu funcționează

  • Trebuie să generăm o eroare

De exemplu:

1 + "stuff"
Error in 1 + "stuff": non-numeric argument to binary operator
Programare defensivă în R

Opriți totul

Pentru a genera o eroare, folosim funcția 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)
}
Programare defensivă în R

Interceptați erorile la timp

  • Nu puteți suprima (sau ignora) erorile
    • Prin definiție, o eroare împiedică R să continue
    • În schimb, erorile se interceptează

Programare defensivă în R

Funcția try()

Funcția try() acționează similar cu suppress()

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

Încearcă să execute ceva; dacă nu reușește, continuă execuția

Programare defensivă în R

Idiomul try()

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>
Programare defensivă în R

Idiomul try()

result <- try("Scotland" + "World cup", silent = TRUE)
class(result)
[1] "try-error"
if(class(result) == "try-error")
  ## Do something useful
Programare defensivă în R

Să exersăm!

Programare defensivă în R

Preparing Video For Download...