I have no idea if the try-catch exception handling was ever posted before in some of the old-dead mohaa forums, but
The only mod/script I ever seen using try-catch is the Date and Time API made by Sor.
That's where I got the info from, so credits to him for the "discovery".

Here are some conclusions that I came up with:
- The try-catch exception handling in MOHAA doesn't catch all the exceptions, so you can't avoid the server from crashing with this.
- You have to manually "throw" each exception you want to "catch"
- Every exception has to have his own label inside the catch{} block
- You can only have one catch{} statements after each try{}

Here's a fictional example code so you can get an idea on how it works:

main:
try {
local.name = "UnnamedSoldier";
local.arg = NIL;
local.string = NIL;

local.result = waitthread getInfo local.name local.arg local.string;
} catch {
InvalidNameException:
conprintf("ERROR: Invalid Name\n");
end;
InvalidArgumentException:
conprintf("ERROR: Invalid Argument\n");
end;
InvalidStringException:
conprintf("ERROR: Invalid String\n");
end;
}
// Console Output: -> "ERROR: Invalid Argument"
end;

getInfo local.name local.arg local.string:
// NO ERROR:
if (!local.name) {
throw InvalidNameException; // <-- Throws to the specified label inside the "catch" block.
// After "throw" the thread ends and nothing else is executed.
}

// ERROR: local.arg = NIL
if (!local.arg) {
throw InvalidArgumentException; // <-- Throws to the specified label inside the "catch" block.
// After "throw" the thread ends and nothing else is executed.
}

// ERROR: local.string = NIL
// This won't be returned, as the thread already ended in the previous "throw"
if (!local.string) {
throw InvalidStringException; // <-- Throws to the specified label inside the "catch" block.
// After "throw" the thread ends and nothing else is executed.
}
end local.result;


InvalidNameException:
conprintf("This thread will not be executed, even when it has the same label as the one inside the 'catch' block.\n");
end;
InvalidArgumentException:
conprintf("This thread will not be executed, even when it has the same label as the one inside the 'catch' block.\n");
end;
InvalidStringException:
conprintf("This thread will not be executed, even when it has the same label as the one inside the 'catch' block.\n");
end;


Another shorter example:

try {
local.a = 100;
local.b = 0
if (local.a > local.b) {
throw Exception;
}
} catch {
Exception:
println("ERROR: local.a > local.b");
}
// Console Output: -> "ERROR: local.a > local.b"


You can take a look to the Date and Time API mod, and see how it works in a real script.

As extra info, You can't find any try-catch exception handling in any of the default scripts in MOHAA and/or FAKK2
The original devs never used it on the game.


Sorry if this isn't very clear, i'm bad at explaining things