Arma 3 Scripting

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"; };    // useless

The proper way:

_divider = 0;
try        { if (_divider == 0) then { throw "div0"; }; a = 1 / _divider; }
catch    { hint "illegal operation"; };