Exception handling: Difference between revisions
m (changed introduction text) |
Lou Montana (talk | contribs) (Some wiki formatting, Add alt syntax, Add Introduced with category) |
||
| (19 intermediate revisions by 10 users not shown) | |||
| Line 1: | Line 1: | ||
{{GVI|arma1|1.00}} | |||
{{arma1}} introduced exception handling through the [[try]], [[catch]] and [[throw]] scripting commands, allowing scripts to create and react to exceptions. | |||
Standard structure: | |||
<sqf> | |||
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 {{arma3}} 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"]; | |||
}; | |||
}; | |||
</sqf> | |||
{{ | {{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: | |||
<sqf> | |||
_divider = 0; | |||
try { a = 1 / _divider; } // SQF error happens here already | |||
catch { hint "illegal operation"; }; // useless | |||
</sqf> | |||
The proper way: | |||
<sqf> | |||
_divider = 0; | |||
try { if (_divider == 0) then { throw "div0"; }; a = 1 / _divider; } | |||
catch { hint "illegal operation"; }; | |||
</sqf> | |||
}} | |||
[[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"];
};
};