Have you heard of people who have taken out insurance, only do discover that they're not covered for some eventuality - "but the list of circumstances doesn't include your flight being canceled because the plane couldn't fly through volcanic ash" is a story that many people heard, with an irony that no-one had even thought of that eventuality before it happened.
There has to be a better way. And in programming, there is!
We have long been encouraged - and I encourage delegates on courses - to check the external environment to their program. That's user inputs to make sure that when a number is asked for, they really have entered a number. It's checking the file system to make sure that a file they have asked to read really does exist. And it's checking that a network connection is alive if you're going to use a network resource. But such checks cannot allow for every eventuality, and something else is needed.
The "fail safe" way of mopping up all fluky errors (and a lot of the standard ones too) is to use an exception - where you write you code along the lines of "try to do X, and if it doesn't work for any reason, do Y to handle the problem. The syntax varies in different languages - in Python, we use the keyword try
to preface the code that we want to put in a safety net, and we use the keyword except
to specify the code that's to be run if the first block needs to be rescued.
From the Python course, just completed in Frankfurt - applying the net:
said = raw_input(pr)
val = int(said)
And what to do when your user lands in the net and needs a rescue:
print "Error - expected a whole number"
The complete source example - which includes a reprompt and further read from the user if an integer is not received -is [here]
. The same principle applies in other languages - in Ruby you have a begin
and a rescue
block. Source example [here]
Note - even with exceptions there can be slightly more to it than just a single safety net.
We've chosen in the complete example to reprompt the user which initially you might think is always a good thing to do. However, if the user's input was an end of file, there is no point
in trying to read any further - and to do so may even put our program into an infinite loop. So I've added a second except
block to my source, and it's first in the source so that it takes precedence - to specifically catch end-of-file conditions and handle them in a different way. (written 2011-02-19, updated 2011-02-20)
Associated topics are indexed underY109 - Python - Exceptions 
Exception, Lambda, Generator, Slice, Dict - examples in one Python program - (2013-03-04) 
Reporting the full stack trace when you catch a Python exception - (2012-11-22) 
How many times ... has this loco headed west through Tenby? - Python exceptions - (2012-11-05) 
Error checking in a Python program - making your program robust via exceptions - (2012-03-22) 
Pressing ^C in a Python program. Also Progress Bar. - (2011-09-15) 
Exceptions - a fail-safe way of trapping things that may go wrong - (2011-09-11) 
Using an exception to initialise a static variable in a Python function / method - (2010-10-13) 
Python - some common questions answered in code examples - (2010-10-10) 
Handling unusual and error conditions - exceptions - (2010-02-03) 
Robust user input (exception handling) example in Python - (2009-09-17) 
Python - fresh examples of all the fundamentals - (2009-08-20) 
Python - using exceptions to set a fallback - (2009-07-12) 
UnboundLocalError - Python Message - (2009-01-31) 
Trying things in Python - (2007-06-18) 
Nested exceptions in Python - (2007-01-18) 
Exceptions in Python - (2005-07-17)R111 - Ruby - Exceptions. 
Reading and checking user inputs - first lessons - Ruby - (2013-02-17) 
Sorta sorting a hash, and what if an exception is NOT thrown - Ruby - (2011-09-12) 
Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23) 
Ruby collections and strings - some new examples - (2010-02-03) 
Direct access to object variable (attributes) in Ruby - (2010-02-02) 
String to number conversion with error trapping in Ruby - (2010-02-01) 
What are exceptions - Python based answer - (2008-11-08)
Some other Articles
Beware - a=a+b and a+=b are different - PythonAge limits for Well House Consultants Open Source courses?Oops - I typed ci not vi, and have lost my file ...The cost of roadworks on the economy of our town - 1800 pounds per hour?Insurance against any errors - Volcanoes and PythonComparing German, Dutch and British RailwaysThe Rhine in winterSharing a single hotel internet connection without carrying extra hardwareWhat is the Melksham Chamber of Commerce? On consultations, car parking, and Melksham town centre