Skip to content

Instantly share code, notes, and snippets.

@fxi
Last active July 27, 2016 13:29
Show Gist options
  • Save fxi/4d51aa11c1b1e6b6b70573c5475912ad to your computer and use it in GitHub Desktop.
Save fxi/4d51aa11c1b1e6b6b70573c5475912ad to your computer and use it in GitHub Desktop.
# demonstration de tryCatch
# exemple minimal
tryCatch(stop("yo"),error=function(cond){print(cond$message)})
# exemple en téléchargeant un fichier
superTest <- function(){
# Valeur initiale
continue <- TRUE
# On créer un fichier temporaire
tmpFile <- tempfile()
# On indique le nombre d'itérations
maxTry <- 5
# On créer un vecteur contenant les url a tester pour la demonstration :
# Ca devrait produire 4 erreurs et un succès
seqURL <- c(
"url bidon qui ne va pas marcher",
"url bidon qui ne va pas marcher",
"url bidon qui ne va pas marcher",
"url bidon qui ne va pas marcher",
"https://raw.githubusercontent.com/fxi/map-x-shiny/master/run.R"
)
for( i in 1:maxTry ){
# Si continue est TRUE
if(continue){
# Je gère moi-même les erreurs, super.
tryCatch({
# Je prends une nouvelle URL
url <- seqURL[i]
# J'execute une commande
download.file(
url = url,
destfile = tmpFile
)
# Ici ça s'arrête si y'a eu une erreur.
# Si y'a pas eu d'erreur, continue devient FALSE
continue <- FALSE
# Ca a marché !
msg <- sprintf(
"Le fichier %1$s a été téléchargé ici: %2$s \n"
, basename(url)
, tmpFile
)
# On imprime le message final
cat(msg)
},error = function(cond){
# Nombre d'essai restant
leftTry <- maxTry - i
# Ici on gère le message d'erreur
msg <- sprintf(
"Erreur, y'a comme un problème, j'essaie encore %1$s fois dans %2$s secondes.\n"
, leftTry
, i
)
# On imprime le message
cat(msg)
# On attend un moment
Sys.sleep( i )
})
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment