Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Python Basics Functions and Looping Raising Exceptions

Erik Embervine
seal-mask
.a{fill-rule:evenodd;}techdegree
Erik Embervine
Python Development Techdegree Student 1,845 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 1,845 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
218,529 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.