Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Python Basics Functions and Looping Raising Exceptions

Erik Embervine
seal-mask
.a{fill-rule:evenodd;}techdegree
Erik Embervine
Python Development Techdegree Student 2,442 Points

is the code presented in this video "clean" or "complete"?

because when i run it and enter a string value when it prompts for the number of people to split the check, i get an "invalid literal for int() with base 10: 'zero'"...

i'm assuming we don't want the user to see this? am i missing something? i came up with my own solution but i'm curious if there are other ways to handle different types of exceptions in this case without sending the user an "ugly" error message..

Erik Embervine
seal-mask
.a{fill-rule:evenodd;}techdegree
Erik Embervine
Python Development Techdegree Student 2,442 Points

FYI, this was the only way I could figure out how to handle different exceptions appropriately (with a while loop):

import math

def splitCheck(total,numberOfPeople):
    if numberOfPeople <= 1:
        raise ValueError("Need more than 1 person to split a check..")
    return math.ceil(total / numberOfPeople)

while True:
    try:
        totalDue = float(input("What is the total? "))
        numberOfPeople = int(input("How many people? "))
    except ValueError:
        print("Sorry, not a valid number")
        continue
    else:
        try:
            amountDue = splitCheck(totalDue,numberOfPeople)
            break
        except ValueError as err:
            print(err)
            continue

print("Each person owes $",amountDue)

1 Answer

Steven Parker
Steven Parker
229,744 Points

It's a nice enhancement. :+1: As I mentioned in your previous question, you can expect plenty opportunities for extra practice by enhancing future exercises.