The best working try/catch replacement in classic client is to put the crashing code into the OnRun part of a seperate codeunit.
You can then call the code from another object (codeunit, form, report, etc) with an if-clause
IF NOT MyCrashyCodeunit.RUN THEN BEGIN
// Errror handling here
END