Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - Français


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.

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 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 — signale une erreur d'éxécution
  • 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

Historique

VersionDescription
6.0.0 try et catch sont maintenant protégés. Les affectations telles que try=1 ou catch=2 ne sont plus possibles.
Report an issue
<< then Structure de contrôle while >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:34:11 CEST 2023