Xcos load: use a valid port type value
[scilab.git] / scilab / modules / core / help / ru_RU / 1_keywords / try.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <refentry 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" xmlns:scilab="http://www.scilab.org" xml:id="try" xml:lang="ru">
3     <refnamediv>
4         <refname>try</refname>
5         <refpurpose>начало блока try в управляющей структуре try-catch
6         </refpurpose>
7     </refnamediv>
8     <refnamediv xml:id="catch">
9         <refname>catch</refname>
10         <refpurpose>
11             начало блока catch в управляющей структуре try-catch
12         </refpurpose>
13     </refnamediv>
14     <refsynopsisdiv>
15         <title>Последовательность вызова</title>
16         <synopsis>
17             try
18             statements
19             catch
20             statements
21             end
22         </synopsis>
23     </refsynopsisdiv>
24     <refsection>
25         <title>Описание</title>
26         <para>
27             Управляющая структура <literal>try</literal>-<literal>catch</literal> может быть использована для управления кодом программы, который может формировать ошибки.
28         </para>
29         <para>
30             Когда исполняется управляющая структура <literal>try</literal>-<literal>catch</literal>, то
31             обычно исполняются только инструкции между ключевыми словами <literal>try</literal> и 
32             <literal>catch</literal>. Однако, если возникает ошибка во время выполнения любой из этих 
33             инструкций, то ошибка записывается, оставшиеся инструкции вплоть до ключевого слова 
34             <literal>catch</literal> пропускаются, и исполняются инструкции между ключевыми словами 
35             <literal>catch</literal> и <literal>end</literal>, используя  режим обработки ошибок по 
36             умолчанию.
37         </para>
38         <para>
39             Записанная ошибка может быть извлечена с помощью функции 
40             <link linkend="lasterror">lasterror</link>.
41         </para>
42         <para>
43             Инструкции блока <literal>catch</literal>, как и само ключевое слово <literal>catch</literal>,
44             могут быть опущены, если нет альтернативных инструкций.
45         </para>
46         <para>
47             Заметьте, что можно также использовать функцию <link linkend="execstr">execstr</link> 
48             с аргументом <literal>'errcatch'</literal> для обработки ошибок. Это может быть особенно полезным для обработки синтаксических ошибок.
49         </para>
50         <para>
51             Заметьте также, что управляющая структура <literal>try-catch</literal> в некотором роде похожа на:
52         </para>
53         <programlisting><![CDATA[ 
54 if execstr("<try instructions>","errcatch")<>0 then
55   <catch instructions>
56 end
57  ]]></programlisting>
58         <para>
59             Она использует тот же внутренний механизм, что и. 
60             Именно по этой причине или
61             <emphasis>execstr(...,"errcatch")</emphasis> не могут быть включены в управляющую структуру
62             <literal>try</literal>-<literal>catch</literal>. Этот контекст обнаруживается и формируется
63             особое сообщение об ошибке (эта ошибка отлавливается и хранится как и любая другая ошибка, если на неё поставлена ловушка в блоке <literal>try</literal>).
64         </para>
65         <para>
66             Тем не менее управляющие структуры <literal>try</literal>-<literal>catch</literal> могут быть вложены друг в друга (см. пример 2 ниже).
67         </para>
68     </refsection>
69     <refsection>
70         <title>Примеры</title>
71         <programlisting role="example"><![CDATA[ 
72 // Пример 1
73 file_path=TMPDIR+'/wrong'
74 try
75   u=mopen(file_path,'r')
76   x=mget(10,'c',u)
77 catch
78   disp(['файл '+file_path+ ' нельзя прочитать используя значения по умолчанию для x'])
79   x=1:10
80 end 
81  [error_message,error_number]=lasterror(%t)
82  ]]></programlisting>
83         <programlisting role="example"><![CDATA[ 
84  
85 // Пример 2 (вложенные структуры try/catch)
86 function nestedtry(a,b)
87 disp("СТАРТ")
88 mprintf("\ta имеет значение: %s\t\tb имеет значение: %s\n",string(a),string(b))
89 try
90   disp("try 1")
91   try
92     disp("try 2")
93     z=a+1;  // ошибка, если значение строковое 
94   catch
95     disp("catch 2")
96     t=b+1;  // ошибка, если значение строковое
97   end
98   disp("после try 2")
99 catch
100   disp("catch 1")
101 end
102 disp("после try 1 - КОНЕЦ")
103 endfunction
104 nestedtry(1,1)
105 nestedtry("строка",1)
106 nestedtry(1,"строка")
107 nestedtry("строка","строка")
108  ]]></programlisting>
109     </refsection>
110     <refsection role="see also">
111         <title>Смотрите также</title>
112         <simplelist type="inline">
113             <member>
114                 <link linkend="error">error</link>
115             </member>
116             <member>
117                 <link linkend="execstr">execstr</link>
118             </member>
119             <member>
120                 <link linkend="if">if</link>
121             </member>
122             <member>
123                 <link linkend="lasterror">lasterror</link>
124             </member>
125         </simplelist>
126     </refsection>
127 </refentry>