Exception handling: Difference between revisions
Lou Montana (talk | contribs) m (Some wiki formatting) |
Lou Montana (talk | contribs) (Some wiki formatting, Add alt syntax, Add Introduced with category) |
||
| Line 1: | Line 1: | ||
{{GVI|arma1|1.00}} | |||
Standard | {{arma1}} introduced exception handling through the [[try]], [[catch]] and [[throw]] scripting commands, allowing scripts to create and react to exceptions. | ||
Standard structure: | |||
<sqf> | <sqf> | ||
try | try // code block that can throw exception | ||
{ | { | ||
// | if (_name == "") then { throw "no name"; }; // this exits the [[try]] block and enters the [[catch]] block below | ||
if (_name == "") | if (_name == "") throw "no name"; // since {{arma3}} v1.54 | ||
titleText [format ["Good morning, Captain %1.", _name], "PLAIN DOWN"]; | |||
} | } | ||
catch | catch // code block that processes an exception | ||
{ | { | ||
if (_exception == "no name") then | if (_exception == "no name") then | ||
{ | { | ||
hint "Name was not entered"; | hint "Name was not entered"; | ||
titleText [" | titleText ["Good morning, anonymous Captain.", "PLAIN DOWN"]; | ||
}; | }; | ||
}; | }; | ||
</sqf> | </sqf> | ||
{{Feature|important|{{Name| | |||
{{Feature|important| | |||
{{Name|rv}} scripting commands do '''not''' create SQF exceptions by themselves if they encounter an illegal situation, | |||
they throw a '''''compilation''''' exception that cannot be caught by this try-catch structure explained here. | |||
The following would therefore '''not''' create a catchable exception: | The following would therefore '''not''' create a catchable exception: | ||
<sqf> | <sqf> | ||
try | _divider = 0; | ||
{ | try { a = 1 / _divider; } // SQF error happens here already | ||
catch { hint "illegal operation"; }; // useless | |||
</sqf> | |||
catch | |||
{ | The proper way: | ||
<sqf> | |||
}; | _divider = 0; | ||
try { if (_divider == 0) then { throw "div0"; }; a = 1 / _divider; } | |||
catch { hint "illegal operation"; }; | |||
</sqf> | </sqf> | ||
}} | }} | ||
| Line 45: | Line 44: | ||
[[Category: Scripting Topics]] | [[Category: Scripting Topics]] | ||
[[Category:Introduced with Armed Assault version 1.00]] | |||
Latest revision as of 18:15, 7 January 2026
Armed Assault introduced exception handling through the try, catch and throw scripting commands, allowing scripts to create and react to exceptions.
Standard structure:
try // code block that can throw exception
{
if (_name == "") then { throw "no name"; }; // this exits the try block and enters the catch block below
if (_name == "") throw "no name"; // since Arma 3 v1.54
titleText [format ["Good morning, Captain %1.", _name], "PLAIN DOWN"];
}
catch // code block that processes an exception
{
if (_exception == "no name") then
{
hint "Name was not entered";
titleText ["Good morning, anonymous Captain.", "PLAIN DOWN"];
};
};