To start, you need to understand that try/catch - it's not about mistakes, it's about control flows.
You have the main flow of control - one that you build out any IFS ever existed, for s, function calls and returns from them in General of normal operators.
But there is an alternative flow, which allows under certain conditions (namely when an exception is thrown) transferred to another point of the program, with another state of the call stack that it'd actually be possible to do the usual operators, but required a lot of scribbling.
Be transported to another point of the program may need to reboot it, staying in a correct and understandable program status.
To shit in the log, do not have anywhere to move - exception logging subsystem do not usually break.