Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 2.56 KB

ex1_4.md

File metadata and controls

87 lines (63 loc) · 2.56 KB

[ Index | Exercise 1.3 | Exercise 1.5 ]

Exercise 1.4

Objectives:

  • Review of how to define simple functions
  • Exception handling

Files Created: None

Files Modified: pcost.py

(a) Defining a function

Take the program pcost.py that you wrote in the last exercise and convert it into a function portfolio_cost(filename) that takes a filename as input, reads the portfolio data in that file, and returns the total cost of the portfolio as a floating point number. Once you written the function, have your program call the function by simply adding this statement at the end:

print(portfolio_cost('Data/portfolio.dat'))

Run your program and make sure it produces the same output as before.

(b) Adding Error Handling

When writing programs that process data, it is common to encounter errors related to bad data (malformed, missing fields, etc.). Modify your pcost.py program to read the data file Data/portfolio3.dat and run it (hint: it should crash).

Modify your function slightly so that it is able to recover from lines with bad data. For example, the conversion functions int() and float() raise a ValueError exception if they can't convert the input. Use try and except to catch and print a warning message about lines that can't be parsed. For example:

Couldn't parse: 'C - 53.08\n'
Reason: invalid literal for int() with base 10: '-'
Couldn't parse: 'DIS - 34.20\n'
Reason: invalid literal for int() with base 10: '-'
...

Try running your program on the Data/portfolio3.dat file again. It should run successfully despite printed warning messages.

(c) Interactive Experimentation

Run your pcost.py program and call the portfolio_cost() function directly from the interactive interpreter.

>>> portfolio_cost('Data/portfolio.dat')
44671.15
>>> portfolio_cost('Data/portfolio2.dat')
19908.75
>>>

Note: To do this, you might have to run python using the -i option. For example:

bash % python3 -i pcost.py

We are going to be writing a lot of programs where you define functions and experiment interactively. Make sure you know how to do this.

[ Solution | Index | Exercise 1.3 | Exercise 1.5 ]


>>> Advanced Python Mastery
... A course by dabeaz
... Copyright 2007-2023

. This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License