Mercurial > octave-nkf
annotate doc/interpreter/errors.txi @ 19630:0e1f5a750d00
maint: Periodic merge of gui-release to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 20 Jan 2015 10:24:46 -0500 |
parents | d4a920d28242 446c46af4b42 |
children | 4197fc428c7d |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17281
diff
changeset
|
1 @c Copyright (C) 1996-2013 John W. Eaton |
7018 | 2 @c |
3 @c This file is part of Octave. | |
4 @c | |
5 @c Octave is free software; you can redistribute it and/or modify it | |
6 @c under the terms of the GNU General Public License as published by the | |
7 @c Free Software Foundation; either version 3 of the License, or (at | |
8 @c your option) any later version. | |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
9 @c |
7018 | 10 @c Octave is distributed in the hope that it will be useful, but WITHOUT |
11 @c ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
12 @c FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
13 @c for more details. | |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
14 @c |
7018 | 15 @c You should have received a copy of the GNU General Public License |
16 @c along with Octave; see the file COPYING. If not, see | |
17 @c <http://www.gnu.org/licenses/>. | |
3294 | 18 |
6667 | 19 @node Errors and Warnings |
20 @chapter Errors and Warnings | |
3294 | 21 |
22 Octave includes several functions for printing error and warning | |
23 messages. When you write functions that need to take special action | |
24 when they encounter abnormal conditions, you should print the error | |
25 messages using the functions described in this chapter. | |
26 | |
6667 | 27 Since many of Octave's functions use these functions, it is also useful |
28 to understand them, so that errors and warnings can be handled. | |
29 | |
30 @menu | |
31 * Handling Errors:: | |
32 * Handling Warnings:: | |
33 @end menu | |
34 | |
35 @node Handling Errors | |
36 @section Handling Errors | |
37 | |
38 An error is something that occurs when a program is in a state where | |
39 it doesn't make sense to continue. An example is when a function is | |
40 called with too few input arguments. In this situation the function | |
41 should abort with an error message informing the user of the lacking | |
42 input arguments. | |
43 | |
44 Since an error can occur during the evaluation of a program, it is | |
45 very convenient to be able to detect that an error occurred, so that | |
46 the error can be fixed. This is possible with the @code{try} statement | |
15684
ddc651eecf7a
Fix Info index for language statements (bug #37787)
Rik <rik@octave.org>
parents:
15544
diff
changeset
|
47 described in @ref{The try Statement}. |
6667 | 48 |
49 @menu | |
50 * Raising Errors:: | |
51 * Catching Errors:: | |
12560
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
52 * Recovering From Errors:: |
6667 | 53 @end menu |
54 | |
55 @node Raising Errors | |
56 @subsection Raising Errors | |
57 | |
58 The most common use of errors is for checking input arguments to | |
59 functions. The following example calls the @code{error} function if | |
60 the function @code{f} is called without any input arguments. | |
61 | |
62 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
63 @group |
6667 | 64 function f (arg1) |
65 if (nargin == 0) | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
66 error ("not enough input arguments"); |
6667 | 67 endif |
68 endfunction | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
69 @end group |
6667 | 70 @end example |
71 | |
72 When the @code{error} function is called, it prints the given message | |
73 and returns to the Octave prompt. This means that no code following | |
74 a call to @code{error} will be executed. | |
75 | |
3373 | 76 @DOCSTRING(error) |
3294 | 77 |
6667 | 78 Since it is common to use errors when there is something wrong with |
79 the input to a function, Octave supports functions to simplify such code. | |
80 When the @code{print_usage} function is called, it reads the help text | |
81 of the function calling @code{print_usage}, and presents a useful error. | |
82 If the help text is written in Texinfo it is possible to present an | |
83 error message that only contains the function prototypes as described | |
84 by the @code{@@deftypefn} parts of the help text. When the help text | |
85 isn't written in Texinfo, the error message contains the entire help | |
86 message. | |
87 | |
88 Consider the following function. | |
10828
322f43e0e170
Grammarcheck .txi documentation files.
Rik <octave@nomad.inbox5.com>
parents:
9293
diff
changeset
|
89 |
6667 | 90 @example |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
91 @group |
6667 | 92 ## -*- texinfo -*- |
93 ## @@deftypefn @{Function File@} f (@@var@{arg1@}) | |
94 ## Function help text goes here@dots{} | |
95 ## @@end deftypefn | |
96 function f (arg1) | |
97 if (nargin == 0) | |
98 print_usage (); | |
99 endif | |
100 endfunction | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
101 @end group |
6667 | 102 @end example |
103 | |
104 @noindent | |
105 When it is called with no input arguments it produces the following | |
106 error. | |
107 | |
108 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
109 @group |
6667 | 110 f () |
8015
30629059b72d
Update the manual to reflect the changes in error output
sh@sh-laptop
parents:
7031
diff
changeset
|
111 |
9293
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
112 @print{} error: Invalid call to f. Correct usage is: |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
113 @print{} |
9293
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
114 @print{} -- Function File: f (ARG1) |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
115 @print{} |
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
116 @print{} |
9293
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
117 @print{} Additional help for built-in functions and operators is |
15544
6a4e79110857
doc: Replace 'on-line' with modern 'online' in documentation and messages.
Rik <rik@octave.org>
parents:
15524
diff
changeset
|
118 @print{} available in the online version of the manual. Use the command |
9293
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
119 @print{} `doc <topic>' to search the manual index. |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
120 @print{} |
9293
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
121 @print{} Help and information about Octave is also available on the WWW |
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
122 @print{} at http://www.octave.org and via the help@@octave.org |
d371cb65428a
Fix output from 'print_usage' in Errors chapter in the manual
Soren Hauberg <hauberg@gmail.com>
parents:
9245
diff
changeset
|
123 @print{} mailing list. |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
124 @end group |
6667 | 125 @end example |
126 | |
127 @DOCSTRING(print_usage) | |
128 | |
6551 | 129 @DOCSTRING(beep) |
130 | |
3373 | 131 @DOCSTRING(beep_on_error) |
3294 | 132 |
6667 | 133 @node Catching Errors |
134 @subsection Catching Errors | |
135 | |
136 When an error occurs, it can be detected and handled using the | |
15684
ddc651eecf7a
Fix Info index for language statements (bug #37787)
Rik <rik@octave.org>
parents:
15544
diff
changeset
|
137 @code{try} statement as described in @ref{The try Statement}. |
6667 | 138 As an example, the following piece of code counts the number of errors |
139 that occurs during a @code{for} loop. | |
140 | |
141 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
142 @group |
6667 | 143 number_of_errors = 0; |
144 for n = 1:100 | |
145 try | |
146 @dots{} | |
147 catch | |
148 number_of_errors++; | |
149 end_try_catch | |
150 endfor | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
151 @end group |
6667 | 152 @end example |
3294 | 153 |
6667 | 154 The above example treats all errors the same. In many situations it |
155 can however be necessary to discriminate between errors, and take | |
156 different actions depending on the error. The @code{lasterror} | |
157 function returns a structure containing information about the last | |
158 error that occurred. As an example, the code above could be changed | |
159 to count the number of errors related to the @samp{*} operator. | |
6549 | 160 |
6667 | 161 @example |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
162 @group |
6667 | 163 number_of_errors = 0; |
164 for n = 1:100 | |
165 try | |
166 @dots{} | |
167 catch | |
168 msg = lasterror.message; | |
169 if (strfind (msg, "operator *")) | |
170 number_of_errors++; | |
171 endif | |
172 end_try_catch | |
173 endfor | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
174 @end group |
6667 | 175 @end example |
3294 | 176 |
18220
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
177 @noindent |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
178 Alternatively, the output of the @code{lasterror} function can be found |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
179 in a variable indicated immediately after the @code{catch} keyword, as |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
180 in the example below showing how to redirect an error as a warning: |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
181 |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
182 @example |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
183 @group |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
184 try |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
185 @dots{} |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
186 catch err |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
187 warning(err.identifier, err.message); |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
188 @dots{} |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
189 end_try_catch |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
190 @end group |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
191 @end example |
6fd22474783e
doc: Update manual for "catch err" syntax (bug #33217)
Felipe G. Nievinski <fgnievinski@gmail.com>
parents:
17757
diff
changeset
|
192 |
6549 | 193 @DOCSTRING(lasterror) |
194 | |
4169 | 195 @DOCSTRING(lasterr) |
196 | |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
197 It is also possible to assign an identification string to an error. |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
198 If an error has such an ID the user can catch this error |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
199 as will be shown in the next example. To assign an ID to an error, |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
200 simply call @code{error} with two string arguments, where the first |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
201 is the identification string, and the second is the actual error. Note |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
202 that error IDs are in the format @qcode{"NAMESPACE:ERROR-NAME"}. The namespace |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
203 @qcode{"Octave"} is used for Octave's own errors. Any other string is available |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
204 as a namespace for user's own errors. |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
205 |
16826
a4969508008e
doc: Periodic spellcheck of the documentation.
Rik <rik@octave.org>
parents:
16816
diff
changeset
|
206 The next example counts indexing errors. The errors are caught using the |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
207 field identifier of the structure returned by the function @code{lasterror}. |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
208 |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
209 @example |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
210 @group |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
211 number_of_errors = 0; |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
212 for n = 1:100 |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
213 try |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
214 @dots{} |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
215 catch |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
216 id = lasterror.identifier; |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
217 if (strcmp (id, "Octave:invalid-indexing")) |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
218 number_of_errors++; |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
219 endif |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
220 end_try_catch |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
221 endfor |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
222 @end group |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
223 @end example |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
224 |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
225 The functions distributed with Octave can issue one of the following |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
226 errors. |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
227 |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
228 @DOCSTRING(error_ids) |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
229 |
6667 | 230 When an error has been handled it is possible to raise it again. This |
231 can be useful when an error needs to be detected, but the program should | |
232 still abort. This is possible using the @code{rethrow} function. The | |
233 previous example can now be changed to count the number of errors | |
8347
fa78cb8d8a5c
corrections for typos
Brian Gough<bjg@network-theory.co.uk>
parents:
8015
diff
changeset
|
234 related to the @samp{*} operator, but still abort if another kind of |
6667 | 235 error occurs. |
236 | |
237 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
238 @group |
6667 | 239 number_of_errors = 0; |
240 for n = 1:100 | |
241 try | |
242 @dots{} | |
243 catch | |
244 msg = lasterror.message; | |
245 if (strfind (msg, "operator *")) | |
246 number_of_errors++; | |
247 else | |
248 rethrow (lasterror); | |
249 endif | |
250 end_try_catch | |
251 endfor | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
252 @end group |
6667 | 253 @end example |
4169 | 254 |
6549 | 255 @DOCSTRING(rethrow) |
256 | |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
257 @c FIXME: I have no idea what the rest of the functions are used for... |
6549 | 258 |
259 @DOCSTRING(errno) | |
260 | |
261 @DOCSTRING(errno_list) | |
262 | |
12560
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
263 @node Recovering From Errors |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
264 @subsection Recovering From Errors |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
265 |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
266 Octave provides several ways of recovering from errors. There are |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
267 @code{try}/@code{catch} blocks, |
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
268 @code{unwind_protect}/@code{unwind_protect_cleanup} blocks, |
12560
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
269 and finally the @code{onCleanup} command. |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
270 |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
271 The @code{onCleanup} command associates an ordinary Octave variable (the |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
272 trigger) with an arbitrary function (the action). Whenever the Octave variable |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
273 ceases to exist---whether due to a function return, an error, or simply because |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
274 the variable has been removed with @code{clear}---then the assigned function |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
275 is executed. |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
276 |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
277 The function can do anything necessary for cleanup such as closing open file |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
278 handles, printing an error message, or restoring global variables to their |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
279 initial values. The last example is a very convenient idiom for Octave code. |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
280 For example: |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
281 |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
282 @example |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
283 @group |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
284 function rand42 |
17757
dae2230227a7
doc: Use double-quote in preference to single quote in code examples.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
285 old_state = rand ("state"); |
18713
a142f35f3cb6
doc: Fix unbalanced parentheses in documentation.
Rik <rik@octave.org>
parents:
18220
diff
changeset
|
286 restore_state = onCleanup (@@() rand ("state", old_state)); |
17757
dae2230227a7
doc: Use double-quote in preference to single quote in code examples.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
287 rand ("state", 42); |
12560
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
288 @dots{} |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
289 endfunction # rand generator state restored by onCleanup |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
290 @end group |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
291 @end example |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
292 |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
293 @DOCSTRING(onCleanup) |
d6ad4ed57dda
Add onCleanup function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
294 |
6667 | 295 @node Handling Warnings |
296 @section Handling Warnings | |
297 | |
298 Like an error, a warning is issued when something unexpected happens. | |
299 Unlike an error, a warning doesn't abort the currently running program. | |
300 A simple example of a warning is when a number is divided by zero. In | |
301 this case Octave will issue a warning and assign the value @code{Inf} | |
302 to the result. | |
303 | |
304 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
305 @group |
6667 | 306 a = 1/0 |
307 @print{} warning: division by zero | |
308 @result{} a = Inf | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
309 @end group |
6667 | 310 @end example |
311 | |
312 @menu | |
313 * Issuing Warnings:: | |
314 * Enabling and Disabling Warnings:: | |
315 @end menu | |
316 | |
317 @node Issuing Warnings | |
318 @subsection Issuing Warnings | |
319 | |
320 It is possible to issue warnings from any code using the @code{warning} | |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
321 function. In its most simple form, the @code{warning} function takes a |
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
322 string describing the warning as its input argument. As an example, |
6667 | 323 the following code controls if the variable @samp{a} is non-negative, |
324 and if not issues a warning and sets @samp{a} to zero. | |
325 | |
326 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
327 @group |
6667 | 328 a = -1; |
329 if (a < 0) | |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
330 warning ("'a' must be non-negative. Setting 'a' to zero."); |
6667 | 331 a = 0; |
332 endif | |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
333 @print{} 'a' must be non-negative. Setting 'a' to zero. |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
334 @end group |
6667 | 335 @end example |
3294 | 336 |
6667 | 337 Since warnings aren't fatal to a running program, it is not possible |
338 to catch a warning using the @code{try} statement or something similar. | |
339 It is however possible to access the last warning as a string using the | |
340 @code{lastwarn} function. | |
341 | |
8347
fa78cb8d8a5c
corrections for typos
Brian Gough<bjg@network-theory.co.uk>
parents:
8015
diff
changeset
|
342 It is also possible to assign an identification string to a warning. |
6667 | 343 If a warning has such an ID the user can enable and disable this warning |
344 as will be described in the next section. To assign an ID to a warning, | |
345 simply call @code{warning} with two string arguments, where the first | |
15524
15628a84a4fa
Document form of warning IDs is NAMESPACE:WARNING-NAME (bug #37559)
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
346 is the identification string, and the second is the actual warning. Note |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
347 that warning IDs are in the format @qcode{"NAMESPACE:WARNING-NAME"}. The |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
348 namespace @qcode{"Octave"} is used for Octave's own warnings. Any other string |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
349 is available as a namespace for user's own warnings. |
6667 | 350 |
351 @DOCSTRING(warning) | |
352 | |
353 @DOCSTRING(lastwarn) | |
354 | |
15731
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
355 The functions distributed with Octave can issue one of the following |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
356 warnings. |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
357 |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
358 @DOCSTRING(warning_ids) |
18f168880226
error_ids: Adding ids and documentation
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15685
diff
changeset
|
359 |
6667 | 360 @node Enabling and Disabling Warnings |
361 @subsection Enabling and Disabling Warnings | |
362 | |
363 The @code{warning} function also allows you to control which warnings | |
364 are actually printed to the screen. If the @code{warning} function | |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16826
diff
changeset
|
365 is called with a string argument that is either @qcode{"on"} or @qcode{"off"} |
6667 | 366 all warnings will be enabled or disabled. |
3294 | 367 |
6667 | 368 It is also possible to enable and disable individual warnings through |
369 their string identifications. The following code will issue a warning | |
370 | |
371 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
372 @group |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
373 warning ("example:non-negative-variable", |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
374 "'a' must be non-negative. Setting 'a' to zero."); |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
375 @end group |
6667 | 376 @end example |
377 | |
378 @noindent | |
379 while the following won't issue a warning | |
380 | |
381 @example | |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
382 @group |
15524
15628a84a4fa
Document form of warning IDs is NAMESPACE:WARNING-NAME (bug #37559)
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
383 warning ("off", "example:non-negative-variable"); |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18220
diff
changeset
|
384 warning ("example:non-negative-variable", |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
385 "'a' must be non-negative. Setting 'a' to zero."); |
9209
923c7cb7f13f
Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
386 @end group |
6667 | 387 @end example |
388 | |
389 |