Johnson Tran wrote: > Thanks for the replies..so I added the "try" block but it still does not > seem to be outputting my default error message: > > def Conversion(): > try: > > print "This program converts the first value from inches to > centimeters and second value centimeters to inches." print "(1 > inch = 2.54 centimeters)" inches = input("Enter length in inches: > ") centimeters = 2.54 * float(inches) > print "That is", centimeters, "centimeters." > centimeters = input("Enter length in centimeters: ") > inch = float(centimeters) / 2.54 > print "That is", inch, "inches." > > except ValueError: > print "Invalid digit, please try again." > Conversion() > > Error message: > > Traceback (most recent call last): > File "/Users/JT/Desktop/hw#2.py", line 16, in <module> > Conversion() > File "/Users/JT/Desktop/hw#2.py", line 9, in Conversion > centimeters = input("Enter length in centimeters: ") > File "<string>", line 1, in <module> > NameError: name 'fs' is not defined
input() in Python 2.x tries to evaluate your input as a Python expression, so if you enter "2*2" it gives you 4, and when you enter "fs" it tries to look up the value of a global variable "fs" in your python script. You don't have such a variable in your script, so it complains with a NameError. The best way to avoid such puzzling behaviour is to use raw_input() instead of input(). Also you should make the try...except as narrow as possible try: centimeters = float(centimeters) except ValueError as e: print e is likely to catch the float conversion while with many statements in the try-suite you are more likely to hide a problem that is unrelated to that conversion. PS: In Python 3.x raw_input() is gone, but input() behaves like raw_input() in 2.x _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor