Exception handling
Topic · Markdown · JSON · original wiki page
Armed Assault v1.00
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"];
};
};
Important
Real Virtuality 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:
_divider = 0; try { a = 1 / _divider; } // SQF error happens here already catch { hint "illegal operation"; }; // uselessThe proper way:
_divider = 0; try { if (_divider == 0) then { throw "div0"; }; a = 1 / _divider; } catch { hint "illegal operation"; };