Handling errors and exceptions starts long before you get to running your code. Right from the planning phase, you should have contingencies in place to avoid running into errors, especially logical errors that may be harder to catch in some cases.
Practices such as defensive programming can help mitigate future errors in some cases.
According to Wikipedia:
"Defensive programming is a form of defensive design intended to ensure the continuing function of a piece of software under unforeseen circumstances. Defensive programming practices are often used where high availability, safety, or security is needed."
Defensive programming is an approach that's used to improve software and source code, in terms of the following:
General quality—by reducing the number of software bugs and problems.
Making the source code comprehensible—the source code should be readable and understandable, so that it is approved in a code audit.
Making the software behave in a predictable manner...