head first python: ch 3. files and exceptions: dealing with errors
DESCRIPTION
Head First Python: Ch 3. Files and Exceptions: Dealing with Errors. Aug 26, 2013 Kyung-Bin Lim. Outline. Data is external to your program It’s all lines of text Take a closer look at the data Know your data Know your methods and ask for help Modified code - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/1.jpg)
Head First Python: Ch 3. Files and Exceptions: Dealing with Errors
Aug 26, 2013Kyung-Bin Lim
![Page 2: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/2.jpg)
2 / 21
Outline Data is external to your program It’s all lines of text Take a closer look at the data Know your data Know your methods and ask for help Modified code Know your data (better) Two very different approaches First approach: Add extra logic First approach: Code Second approach: Try first, then recover Second approach: Code What if file doesn’t exist? Using another level of exception handling Conclusion: So which is better?
![Page 3: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/3.jpg)
3 / 21
Data is external to your program Most of your programs conform to the input-output model; data comes
in, gets manipulated, and then stored, displayed, printed, or transferred
So far, you’ve learned how to process data as well as display it on screen
But, HOW does Python read data from a file?
![Page 4: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/4.jpg)
4 / 21
It’s all lines of text The basic input mechanism in Phython is line based: when read into
your program from a text file, data arrives one line at a time Python’s open() function lives to interact with files. When combined with
a for statement, reading file is straightforward.
the_file = open(‘sketch.txt)# Do something with the data # in “the_file”The_file = close()
![Page 5: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/5.jpg)
5 / 21
Exercise Start an IDEL session and import the OS to move to the correct directoryimport osos.getcwd()os.chdir(‘... your file directory…’)
Now, open your data file and read the first two lines from the file
data = open(‘sketch.txt’)print(data.readline(), end=‘’)
Man: Is this the right room for an argument?print(data.readline(), end=‘’)
Other Man: I've told you once.
![Page 6: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/6.jpg)
6 / 21
Exercise Let’s rewind the file back to the start
data.seek(0)
You can read every line in the file using for statement
for each_line in data:print(each_line, end=‘’)
![Page 7: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/7.jpg)
7 / 21
Take a closer look at the data Look closely at the data. It appears to conform to a specific format.
![Page 8: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/8.jpg)
8 / 21
Take a closer look at the data With this format in mind, you can process each line to extract parts of
the line as required. the split() method can help here:
The split() method returns a list of string, which are assigned to a list of target identifiers. This is known as multiple assignments.
(role, line_spoken) = each_line.split(“:”)
![Page 9: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/9.jpg)
9 / 21
Exercise
![Page 10: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/10.jpg)
10 / 21
Know your data Your code worked fine for a while, then crashed with a runtime error. Let’s look at the data file and see where it crashed.
The line has TWO colons! This caused split() method to crash, since our code currently expects it to break the line into two parts.
When there is two colons, the split() method breaks the line into three parts and our code doesn’t know what to do if it gets three pieces of string. So is raises a ValueError.
![Page 11: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/11.jpg)
11 / 21
Know your methods and ask for help help() tells you more about BIF methods
The optional argument to split() controls how many breaks occur By default, the data is broken into as many parts as is possible Since we need only two parts, we will set it to 1
![Page 12: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/12.jpg)
12 / 21
Modified code
![Page 13: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/13.jpg)
13 / 21
Know your data (better) Your code has raised another ValueError.
Problem: Some of the lines of data contain no colon, which causes a problem when the split() method goes looking for it. The lack of a colon prevents split() from doing its job, causes the runtime error, which then results in the complaint that the interpreter needs “more than 1 value.”
![Page 14: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/14.jpg)
14 / 21
Two very different approaches
First approach: Add extra logic required work out whether it’s worth invoking split() on the line of data
Second approach:Let the error occur, then simply handle each error if and when it happens
![Page 15: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/15.jpg)
15 / 21
First approach: Add extra logic find() method finds location of a substring in another string, and if it
can’t be found, the find() method returns the value -1. If the method lo-cates the substring, it returns the index of the substring
![Page 16: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/16.jpg)
16 / 21
First approach: Code
![Page 17: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/17.jpg)
17 / 21
Second approach: Try first, then recover Exception handling: Lets the error occur, spots that it has happened, and
then recover try/except mechanism: A way to systematically handle exceptions and
errors at runtime
![Page 18: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/18.jpg)
18 / 21
Second approach: Code
![Page 19: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/19.jpg)
19 / 21
What if file doesn’t exist? Python’s OS module has exist() method that can help determine whether
a data file exists.
![Page 20: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/20.jpg)
20 / 21
Using another level of exception handling
![Page 21: Head First Python: Ch 3. Files and Exceptions: Dealing with Errors](https://reader035.vdocuments.mx/reader035/viewer/2022062302/56816594550346895dd8661a/html5/thumbnails/21.jpg)
21 / 21
Conclusion: So which is better? First approach (adding more logic/code)
– Too complex– Code gets longer and complicated
Second approach (exception handling)– Simple– You can concentrate on what your code needs to do– Easier to read, write, and fix