Exception handling

From Bohemia Interactive Community

Logo A1 black.png 1.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"]; }; };


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