Difference between revisions of "CSC111 Exercises with Exceptions: try/except"

From dftwiki3
Jump to: navigation, search
(Code)
(Code)
Line 51: Line 51:
 
<source lang="python">
 
<source lang="python">
 
def example1():
 
def example1():
     x = eval( input( "enter a number: " ) )
+
     for i in range( 3 ):
    y = eval( input( "enter another number: " ) )
+
        x = int( input( "enter a number: " ) )
    print( x, '/', y, '=', x/y )
+
        y = int( input( "enter another number: " ) )
 +
        print( x, '/', y, '=', x/y )
  
 
def example2( L ):
 
def example2( L ):

Revision as of 07:52, 4 April 2014

--D. Thiebaut (talk) 09:05, 2 April 2014 (EDT)






The exercises below deal with protecting Python code that might crash with try/except statements to make the program robust.





Code in need of try/except statements


  • The program below is not very robust. We can easily make it crash.
  • Observe each function and see how to make it fail, or see why it will fail the way it is called
  • Make the program crash. Register the XXXXError that is generated. For example, if the output of the crash looks like this:

Traceback (most recent call last):
 File "/Users/thiebaut/Desktop/except0.py", line 29, in <module>
   main()
 File "/Users/thiebaut/Desktop/except0.py", line 27, in main
   example3( [ 10, 3, 5, 6 ] )
 File "/Users/thiebaut/Desktop/except0.py", line 18, in example3
   sum = sum + L[i]
IndexError: list index out of range

what you are interested in is IndexError. This is the exception you want to guard your code against.

  try:
      ........
      ........
  except IndexError:
      .........

  • Verify that you have made your functions more robust to erroneous input/data.


Code



def example1():
    for i in range( 3 ):
        x = int( input( "enter a number: " ) )
        y = int( input( "enter another number: " ) )
        print( x, '/', y, '=', x/y )

def example2( L ):
    print( "\n\nExample 2" )
    sum = 0
    sumOfPairs = []
    for i in range( len( L ) ):
        sumOfPairs.append( L[i]+L[i+1] )

    print( "sumOfPairs = ", sumOfPairs )
    print( "sumOfPairs = [", ",".join( [str(k) for k in sumOfPairs] ),"]" )


def printUpperFile( fileName ):
   file = open( fileName, "r" )
   for line in file:
       print( line.upper() )
   file.close()
    
def main():
    example1()
    L = [ 10, 3, 5, 6, 9, 3 ]
    example2( L )
    example2( [ 10, 3, 5, 6, "NA", 3 ] )
    example3( [ 10, 3, 5, 6 ] )

    printUpperFile( "doesNotExistYest.txt" )
    printUpperFile( "./Dessssktop/misspelled.txt" )

main()




...