try: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
m (Fix SQF)
 
(80 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Command|= Comments
{{RV|type=command
____________________________________________________________________________________________


| arma |= Game name
|game1= arma1
|version1= 1.00


|1.00|= Game version
|game2= arma2
____________________________________________________________________________________________
|version2= 1.00


| Defines a try-catch structure. This sets up an [[Exception handling|exception handling]] block. Any thrown exception in a try block is caught in a [[catch]] block. The structured exception block has the following form:
|game3= arma2oa
<code> try //begin of try-catch block
|version3= 1.50
  { //block, that can throw exception }
catch
  { //block, that process an exception. Exception is described in ''_exception'' variable };</code>  |= Description
____________________________________________________________________________________________


| '''try''' code |= Syntax
|game4= tkoh
|version4= 1.00


|p1= code: [[Code]] |= Parameter 1
|game5= arma3
|version5= 0.50


| [[Exception handling|Exception Type]] |= Return value
|gr1= Program Flow
____________________________________________________________________________________________


| s2= args '''try''' code &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (''Since Arma 3 v1.53.133045'') |= Syntax
|descr= Defines a try-catch structure. This sets up an [[Exception handling|exception handling]] block. Any thrown exception in a try block is caught in a [[catch]] block. The structured exception block has the following form:
<sqf>try
{ /* block that can throw exception */ }
catch
{ /* block that processes the exception. Exception is described in the _exception variable */ };</sqf>


|p21= args: [[Anything]] - passed arguments, will be put in ''_this'' variable inside the "code" |= Parameter 1
|s1= [[try]] code
|p22= code: [[Code]] |= Parameter 1


| r2= [[Exception handling|Exception Type]] |= Return value
|p1= code: [[Code]]


| [[Exception handling]], [[throw]], [[catch]] |= See also
|r1= [[Exception handling|Exception Type]]


}}
|s2= args [[try]] code
 
|s2since= arma3 1.54
 
|p21= args: [[Anything]] - passed arguments, will be put in ''_this'' variable inside the "code"
 
|p22= code: [[Code]]
 
|r2= [[Exception handling|Exception Type]]
 
|x1= <sqf>try { throw "invalid argument" } catch { hint str _exception };</sqf>
 
|x2= <sqf>123 try { if (_this != 123) throw "invalid argument" } catch { hint str _exception };</sqf>


<h3 style="display:none">Notes</h3>
|x3= <sqf>
<dl class="command_description">
try {
<!-- Note Section BEGIN -->
if (a > b) throw "Error: some error"; // OK
// the command argument is static
} catch {
hint str _exception;
};


<!-- Note Section END -->
try {
</dl>
_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;
};


<h3 style="display:none">Bottom Section</h3>
try {
[[Category:Scripting Commands|TRY]]
_someFunc = {
[[Category:Scripting Commands ArmA|TRY]]
// ...
[[Category:ArmA: Control Structures|TRY]]
};
[[Category:Command Group: Program Flow|TRY]]
if (a > b) then {throw (call _someFunc)}; // OK
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
// the command argument is dynamic
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
// _someFunc is only called when (a > b) is true
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
} catch {
hint str _exception;
};
</sqf>


<!-- CONTINUE Notes -->
|seealso= [[Exception handling]] [[throw]] [[catch]]
<dl class="command_description">
}}
<dd class="notedate">Posted on June 9, 2015 - 20:52 (UTC)</dd>
 
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
{{Note
<dd class="note">
|user= Killzone_Kid
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.  
|timestamp= 20150609205200
</dd>
|text= 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.
</dl>
}}
<!-- DISCONTINUE Notes -->

Latest revision as of 17:49, 1 November 2022

Hover & click on the images for description

Description

Description:
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 */ };
Groups:
Program Flow

Syntax

Syntax:
try code
Parameters:
code: Code
Return Value:
Exception Type

Alternative Syntax

Syntax:
args try code
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:
123 try { if (_this != 123) throw "invalid argument" } catch { hint str _exception };
Example 3:
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 handling throw catch

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
Killzone_Kid - c
Posted on Jun 09, 2015 - 20:52 (UTC)
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.