File: try.xml

package info (click to toggle)
scilab 5.2.2-9
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 334,832 kB
  • ctags: 52,586
  • sloc: xml: 526,945; ansic: 223,590; fortran: 163,080; java: 56,934; cpp: 33,840; tcl: 27,936; sh: 20,397; makefile: 9,908; ml: 9,451; perl: 1,323; cs: 614; lisp: 30
file content (155 lines) | stat: -rw-r--r-- 5,016 bytes parent folder | download
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>