Exceptions are objects you throw when something goes wrong. They interrupt normal execution and jump to error-handling code, skipping all the code in between. Unlike return codes, you can't ignore exceptions.
If nobody catches one, your program terminates. This forces you to acknowledge that errors can happen and write code to handle them. You can throw any type as an exception: integers, strings, custom classes.
The thrown object carries information about what went wrong from the failure point to the handler that fixes it.