Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Exception-Handling Overview Exception: when something unforeseen happens and causes an error Exception handler catches a raised/thrown exception try.

Similar presentations


Presentation on theme: "1 Exception-Handling Overview Exception: when something unforeseen happens and causes an error Exception handler catches a raised/thrown exception try."— Presentation transcript:

1 1 Exception-Handling Overview Exception: when something unforeseen happens and causes an error Exception handler catches a raised/thrown exception try statement encloses code that may cause exception use raise statement to indicate that an exception occurred Exception handling – improves program clarity by removing error-handling code (in the shape of if ’s) from the “main line” of the program – Improves a program’s fault tolerance

2 number1 = raw_input( "Enter numerator: " ) number2 = raw_input( "Enter denominator: " ) # attempt to convert and divide values try: number1 = float( number1 ) number2 = float( number2 ) result = number1 / number2 # float raises a ValueError exception except ValueError: print "You must enter two numbers" # division by zero raises a ZeroDivisionError exception except ZeroDivisionError: print "Attempted to divide by zero" # else clause's body executes if try-body raises no exceptions else: print "%.3f / %.3f = %.3f" % ( number1, number2, result ) User might raise a ValueError by entering a string that cannot be converted to float Division by zero raises ZeroDivisionError exception Error handling code

3 3 Using if ’s Ugly alternative: what is the main program and what is error handling?? isdigit doesn’t even suffice if the user inputs a float

4 4 if ’s vs. exception handling Exception handling is mostly for when you think you won’t get some bad value. if ’s are for when you know that some values will be bad, i.e. you expect them.

5 5 How and where to handle exceptions Import codon translation module, look up codon not in the dictionary. What to do with the exception? Should the module handle the exception? – return “?” ? – print error message? – exit?.. or should the importing main program? – if translating long sequence, result will be meaningless – if outputting to file, print statements will corrupt it If user should know he’s doing something fatal, don’t catch exception (or raise one!), forcing him to realize his mistake If a meaningful or default response can be given which would not surprise the user, do that.

6 6 14.3 Files and Streams Python views files as sequential streams of bytes Each file ends with an end-of-file marker Opening a file creates an object associated with a stream 0123456789n-1... end-of-file marker Fig. 14.2 Python’s view of a file of n bytes.

7 7 Files and Streams Three file streams created when Python program executes – sys.stdin (standard input stream) – sys.stdout (standard output stream) – sys.stderr (standard error stream) Defaulted to keyboard, screen and screen, respectively ( raw_input uses stdin, print uses stdout ) Redirect: print >> file, “Yes sir we have no bananas” Force print now: sys.stdout.flush()

8 8 Methods for reading a file

9 9 CD management cd.py

10 10 cd.py Implicitly calling the __str__ method of the cd class

11 11 Save cd collection to a file, line by line cd.py sys.exit method terminates the program and prints message Alternatives: file.write(..) : no newline print >> file,.. : newline

12 12 File cdsave.dat cdtest.py Test Prince / Purple Rain (rating: 7.4) Oscar Peterson / Night Train (rating: 8.0) Beatles / Sgt. Pepper (rating: 9.6) Program output Prince Purple Rain 7.4 Oscar Peterson Night Train 8.0 Beatles Sgt. Pepper 9.6

13 13 Load cd collection from file, line by line Create new CD object and add to collection cd.py Remove the trailing newline

14 14 Testing the load method >>> from cd import CD, CDcollection >>> cds = CDcollection() >>> cds.load( 'cdsave.dat') >>> print cds Prince / Purple Rain (rating: 7.4) Oscar Peterson / Night Train (rating: 8.0) Beatles / Sgt. Pepper (rating: 9.6)

15 15 Extending cd class with comments Write each comment on a line of its own, with a suitable number of spaces cd2.py

16 16 Prince / Purple Rain (rating: 7.4) [Groundbreaking!] Oscar Peterson / Night Train (rating: 8.0) [Got it in a Starbucks in West L.A.] [Good album, especially the Gershwin songs.] Beatles / Sgt. Pepper (rating: 9.6) [Groundbreaking AND evergreen!!] cd2test.py

17 17 New save method Write each comment on a line of its own after artist, title and rating cd2.py

18 18 New load method..? Which attributes are which in the saved file?? No longer 3 lines per cd  Change save method or Write super-intelligent load method Prince Purple Rain 7.4 Groundbreaking! Oscar Peterson Night Train 8.0 Got it in a Starbucks in West L.A. Good album, especially the Gershwin songs. Beatles Sgt. Pepper 9.6 Groundbreaking AND evergreen!!

19 19 New load/save methods using module cPickle cd_pickle.py Write entire object (list of CD objects) to file Easy to load object back into memory if you’re completely sure what kind of object the file contains

20 20 Testing the pickle save method cd_pickletest.py.. S'Purple Rain' p6 sS'comments' p7 (lp8 S'Groundbreaking!' p9 asS'artist' p10 S'Prince' p11 sba(icd_pickle CD.. Excerpt from file cd_picklesave.dat

21 21 Testing the load method cd_pickletest_load.py Prince / Purple Rain (rating: 7.4) [Groundbreaking!] Oscar Peterson / Night Train (rating: 8.0) [Got it in a Starbucks in West L.A.] [Good album, especially the Gershwin songs.] Beatles / Sgt. Pepper (rating: 9.6) [Groundbreaking AND evergreen!!] Beatles / A Hard Day's Night (rating: 6.8) [First album with all Lennon/McCartney songs] We need a CDcollection object for which we can call the load method to retrieve the pickled object

22 22..on to the exercises


Download ppt "1 Exception-Handling Overview Exception: when something unforeseen happens and causes an error Exception handler catches a raised/thrown exception try."

Similar presentations


Ads by Google