Christopher Wright wrote:
PS: I wonder, should the runtime really execute finally blocks if an
"Error" exception is thrown? (Errors are for runtime errors, Exception
for normal exceptions.) Isn't it dangerous to execute arbitrary user
code in presence of what is basically an internal error?
Are all Errors unrecoverable except by immediately aborting the
application?
What about logging?
What about putting up a reasonable error message for the user?
What about restarting the failed module in case the issue was temporary
and environmental?
Something is wrong with your program internally if something like this
happens. You can't expect a consistent program state. And most of the
code in finally blocks was not written for such situations. You'll
probably end up throwing another runtime error from within a finally block.
If you really want reliability, you should terminate the process
immediately, and check the situation from another process.