try: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) (Fix Category:Pages using duplicate arguments in template calls and add example) |
Lou Montana (talk | contribs) m (Fix comment format) |
||
Line 9: | Line 9: | ||
{ {{codecomment|/* block that can throw exception */}} } | { {{codecomment|/* block that can throw exception */}} } | ||
[[catch]] | [[catch]] | ||
{ {{codecomment|/* block that processes the exception. Exception is described in the ''_exception'' variable}} };</code> |DESCRIPTION= | { {{codecomment|/* block that processes the exception. Exception is described in the ''_exception'' variable */}} };</code> |DESCRIPTION= | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
Line 84: | Line 84: | ||
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt> | <dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt> | ||
<dd class="note"> | <dd class="note"> | ||
Do not expect this behave like Javascript try catch and ignore all errors. But it does have one useful behaviour. Normally when runtime error occurs in SQF (unlike when there is compile error) it continues to execute till the end. But if the script is placed in [[try]] {} scope and [[throw]] is used upon error, the script immediately terminates, exits the [[try]] {} scope and enters [[catch]] {} scope. This way it is possible to process possible exceptions in civilised manner. | Do not expect this behave like Javascript try catch and ignore all errors. But it does have one useful behaviour. Normally when a runtime error occurs in SQF (unlike when there is compile error) it continues to execute till the end. But if the script is placed in [[try]] {} scope and [[throw]] is used upon error, the script immediately terminates, exits the [[try]] {} scope and enters [[catch]] {} scope. This way it is possible to process possible exceptions in civilised manner. | ||
</dd> | </dd> | ||
</dl> | </dl> | ||
<!-- DISCONTINUE Notes --> | <!-- DISCONTINUE Notes --> |
Revision as of 21:30, 4 January 2020
Description
- Description:
- Description needed
- Groups:
- Uncategorised
Syntax
- Syntax:
- Defines a try-catch structure. This sets up an exception handling block. Any thrown exception in a try block is caught in a catch block. The structured exception block has the following form:
try { /* block that can throw exception */ } catch { /* block that processes the exception. Exception is described in the _exception variable */ };
- Parameters:
- code: Code
- Return Value:
- Return value needed
Alternative Syntax
- Syntax:
- args try code Template:since
- Parameters:
- args: Anything - passed arguments, will be put in _this variable inside the "code"
- code: Code
- Return Value:
- Exception Type
Examples
- Example 1:
try {throw "invalid argument"} catch {hint str _exception};
- Example 2:
- Template:since:
123 try {if (_this != 123) throw "invalid argument"} catch {hint str _exception};
- Example 3:
- The correct usage of shorthand alt syntax:
try { if (a > b) throw "Error: some error"; // OK // The command argument is static } catch { hint str _exception; }; try { _someFunc = { ..... }; if (a > b) throw (call _someFunc); // NOT OK // The command argument is dynamic // _someFunc is called first to get the value regardless of (a > b) outcome } catch { hint str _exception; }; try { _someFunc = { ..... }; if (a > b) then {throw (call _someFunc)}; /// OK // The command argument is dynamic // _someFunc is only called when (a > b) is true } catch { hint str _exception; };
Additional Information
- See also:
- Exception handlingthrowcatch
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Notes
Bottom Section
- Posted on June 9, 2015 - 20:52 (UTC)
- Killzone Kid
- Do not expect this behave like Javascript try catch and ignore all errors. But it does have one useful behaviour. Normally when a runtime error occurs in SQF (unlike when there is compile error) it continues to execute till the end. But if the script is placed in try {} scope and throw is used upon error, the script immediately terminates, exits the try {} scope and enters catch {} scope. This way it is possible to process possible exceptions in civilised manner.