#3:The object/method may notice the abnormality and issue a message. This is probably the least disastrous reaction a program may show.
The program in which the abnormality is observed may decide to stop its intended task, returning an errorcode to its caller. This is a great example of postponing decisions: now the calling function is faced with a problem. Of course the calling function may act similarly, by passing the error-code up to its caller.
The program may decide that things are going out of hand, and may call exit() to terminate the program completely. A tough way to handle a problem.