1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
<?xml version="1.0" encoding="UTF-8"?>
<refentry version="5.0-subset Scilab" xml:id="try" xml:lang="fr"
xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:ns5="http://www.w3.org/1999/xhtml"
xmlns:mml="http://www.w3.org/1998/Math/MathML"
xmlns:db="http://docbook.org/ns/docbook">
<info>
<pubdate>$LastChangedDate$</pubdate>
</info>
<refnamediv>
<refname>try</refname>
<refpurpose>mot clé de début du bloc try dans une instruction de contrôle
try-catch</refpurpose>
</refnamediv>
<refnamediv xml:id="catch">
<refname>catch</refname>
<refpurpose>mot clé de début du bloc catch dans une instruction de
contrôle try-catch</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Séquence d'appel</title>
<synopsis>try
statements
catch
statements
end</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
<para>L'instruction de contrôle
<literal>try</literal>-<literal>catch</literal> 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.</para>
<para>Quand une instruction de contrôle
<literal>try</literal>-<literal>catch</literal> est exécutée, normalement
seules les instructions comprises entre les mots clés
<literal>try</literal> et <literal>catch</literal> 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é <literal>catch</literal> sont ignorées et les instructions
comprises entre les mots clés <literal>catch</literal> et
<literal>end</literal> sont exécutées en utilisant le mode de gestion des
erreurs par défaut (voir <link linkend="errcatch">errcatch</link>).</para>
<para>L'erreur mémorisée peut être retrouvée en utilisant la fonction
<link linkend="lasterror">lasterror</link>.</para>
<para>Les intructions comprises entre les mots clés
<literal>catch</literal> et <literal>end</literal> peuvent être omises
ainsi que le mot clé <literal>catch</literal> si aucun code alternatif
n'est fourni.</para>
<para>Notez que l'on peut aussi utiliser la fonction <link
linkend="execstr">execstr</link> avec l'argument
<literal>'errcatch'</literal> pour gérer les erreurs et tout
particulièrement pour gérer les erreurs de syntaxe.</para>
<para>Notez également que <literal>try-catch</literal> est plus ou moins
similaire à :</para>
<programlisting role = ""><![CDATA[
if execstr("<instructions du bloc try>","errcatch")<>0 then
<instructions du bloc catch>
end
]]></programlisting>
<para>Il utilise le même mécanisme interne que <link
linkend="errcatch">errcatch</link>. C'est pourquoi <link
linkend="errcatch">errcatch</link> ou <emphasis>execstr(...,"errcatch")
</emphasis>ne peut pas être utilisé à l'intérieur d'une structure
<literal>try</literal>-<literal>catch</literal>. Un tel contexte est
détecté et gérè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 <literal>try</literal>).</para>
<para>Par contre plusieurs structures
<literal>try</literal>-<literal>catch</literal> peuvent être imbriquées
les unes dans les autres (voir le deuxième exemple ci-dessous).</para>
</refsection>
<refsection>
<title>Exemples</title>
<programlisting role="example"><![CDATA[
// 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")
]]></programlisting>
</refsection>
<refsection>
<title>Voir Aussi</title>
<simplelist type="inline">
<member><link linkend="error">error</link></member>
<member><link linkend="execstr">execstr</link></member>
<member><link linkend="if">if</link></member>
<member><link linkend="lasterror">lasterror</link></member>
<member><link linkend="errcatch">errcatch</link></member>
</simplelist>
</refsection>
<refsection>
<title>Auteurs</title>
<para>Serge Steer, INRIA</para>
</refsection>
</refentry>
|