Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Português - Русский - 日本語

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Aide de Scilab >> Scilab > Mots clés Scilab > try

try

mot clé de début du bloc try dans une instruction de contrôle try-catch

catch

mot clé de début du bloc catch dans une instruction de contrôle try-catch

Séquence d'appel

try
statements
catch
statements
end

Description

L'instruction de contrôle try-catch peut être utilisée pour controler les conséquences d'une erreur d'exécution en permettant l'exécution de code spécifique en cas d'erreur.

Quand une instruction de contrôle try-catch est exécutée, normalement seules les instructions comprises entre les mots clés try et catch sont exécutées. Cependant, si une erreur se produit pendant l'exécution de ces instructions, l'erreur est mémorisée, les instructions restantes jusqu'au mot clé catch sont ignorées et les instructions comprises entre les mots clés catch et end sont exécutées en utilisant le mode de gestion des erreurs par défaut (voir errcatch).

L'erreur mémorisée peut être retrouvée en utilisant la fonction lasterror.

Les intructions comprises entre les mots clés catch et end peuvent être omises ainsi que le mot clé catch si aucun code alternatif n'est fourni.

Notez que l'on peut aussi utiliser la fonction execstr avec l'argument 'errcatch' pour gérer les erreurs et tout particulièrement pour gérer les erreurs de syntaxe.

Notez également que try-catch est plus ou moins similaire à :

if execstr("<instructions du bloc try>","errcatch")<>0 then
  <instructions du bloc catch>
end

Il utilise le même mécanisme interne que errcatch. C'est pourquoi errcatch ou execstr(...,"errcatch") ne peut pas être utilisé à l'intérieur d'une structure try-catch. Un tel contexte est détecté et génère un message d'erreur spécifique (cette erreur est masquée et mémorisée comme n'importe quelle autre erreur si elle se produit dans le bloc try).

Par contre plusieurs structures try-catch peuvent être imbriquées les unes dans les autres (voir le deuxième exemple ci-dessous).

Exemples

// premier exemple
file_path=TMPDIR+'/wrong'
try
  u=mopen(file_path,'r')
  x=mget(10,'c',u)
catch
  disp(['le fichier '+file_path+ 'ne peut pas être lu',
        'on utilise la valeur  par défaut de x'])
  x=1:10
end
[error_message,error_number]=lasterror(%t)
// 2ème exemple (structures try/catch imbriquées)
function nestedtry(a, b)
disp("DEBUT")
mprintf("\ta est %s\t\tb est %s\n",string(a),string(b))
try
  disp("try 1")
  try
    disp("try 2")
    z=a+1;  // err si chaîne
  catch
    disp("catch 2")
    t=b+1;  // err si chaîne
  end
  disp("après try 2")
catch
  disp("catch 1")
end
disp("après try 1 - FIN")
endfunction
nestedtry(1,1)
nestedtry("une chaîne",1)
nestedtry(1,"une chaîne")
nestedtry("une chaîne","une chaîne")

Voir aussi

  • error — Affichage d'un message d'erreur
  • execstr — exécution d'instructions Scilab contenues dans des chaînes de caractères
  • if — Mot-clé utilisé pour une exécution conditionnelle
  • lasterror — get last recorded error message
  • errcatch — interception d'erreur
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 13:54:27 CEST 2014