Action à faire si Error

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Action à faire si Error

Messagepar Bastien Gamboa » 09 Mar 2017, 16:17

Bonjour,

Je souhaite créer une fonction qui réalisera certaines actions si une erreur se produit.
Voici mon premier essai :

Code : Tout sélectionner

TRY <- function(EXPR) {
  tryCatch(EXPR,
           error=function(c) {
             cat("There was at least one error when the following code was executed:\n", rep("-", times=30), "\n",
                 paste(deparse(substitute(EXPR, env=parent.env(environment()))), collapse="\n"),
                 "\n\n\n\nThe return R error is:\n", rep("-", times=30), "\n", conditionMessage(c),
                 "\n\nOr this one:\n", rep("-", times=30), "\n", geterrmessage())})}
TRY({ AA <- 52754
# QOZRJG MFGMLHRZ gvihnf
stop("zrignqlf") })

Je teste le code (EXPR) dans tryCatch() qui me permet d'evaluer le code et si une erreur se produit, l'évênement est capté et une action peut être effectuée.
Grâce à conditionMessage() ou geterrmessage() (je ne sais lequel des deux utiliser, puisque ne connaissant pas leurs différences) je récupère le message d'erreur.

Pour le contexte, je crée un script R qui analysera des données. Le script sera lancé par une interface codée en Windev. Si une erreur survient dans le script R, j'ai besoin de capter l'évênement pour pouvoir dire à l'utilisateur l'erreur (via tcltk:::tkmessageBox()) et à Windev que le script n'a pas aboutit et qu'il doit donc le relancer.

Mes questions :
1/ Comment (/Est-ce possible de) récupérer la ligne de commentaire via deparse(substitute()) ?
2/ Quelle est la différence entre conditionMessage() ou geterrmessage(), et lequel est le plus adapté pour ma thématique ?
3/ Toutes suggestions/commentaires sur le code actuel sont évidemment les bienvenues

Merci,
Bastien

Didier Plat
Messages : 225
Enregistré le : 02 Nov 2009, 16:47
Contact :

Re: Action à faire si Error

Messagepar Didier Plat » 13 Mar 2017, 11:32

Bonjour,
Si ce n'est pas trop tard, voici une façon de récupérer les messages (mais c'est peut-être tout aussi efficace avec try plutôt que tryCatch ?) :

Code : Tout sélectionner

test <- tryCatch({log(AAA)}, error=function(e) e)
if ("condition" %in% class(test))
{
  print(class(test)) # la nature du problème : erreur, warning...
  messa<-geterrmessage() # le message d'erreur
  tkmessageBox(message=messa, icon="error", title="Expression erronée", parent=MaFenetre)
} else
{
print(test) # la valeur de log(AAA) si AAA a été défini auparavant
}


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité