Exceptions report abnormal runtime situations. Although you have other mechanisms for detecting and reporting runtime errors, exceptions are advantageous because they automate the process of passing the error from a deep down infrastructure function to the highest function in the call chain.In general, infrastructure functions such as memory management routines and hardware access system calls are the first to detect abnormal runtime conditions, e.g., corrupted files, heap exhaustion and a broken disk. Yet they know very little about the application that invoked them. Therefore, they cannot?and shouldn’t?try to handle the exception by themselves. Instead, they should throw the exception propagating it on up in the call chain so that an appropriate handler will deal with it.