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 All Together Now Handle Exceptions

Ava Jones
Ava Jones
1,434 Points

I keep getting an error that I am trying to raise help!!

TICKET_PRICE = 10

tickets_remaining = 100

while tickets_remaining >= 1:

print("TICKETS REMAINING: {}".format(tickets_remaining))


username = input("What is your name? ")


num_tickets = int(input("Hey {} how many tickets would you like to buy? ".format(username)))
#expect an ValueError and handle it
try:
    num_tickets = int(num_tickets) 
except ValueError:
    print("Oh No an error! please try again")
else:
    total_price = num_tickets * TICKET_PRICE

print("THE TOTAL IS: {}".format(total_price))

buy_tickets = input("Do you want to confirm? YES/NO ")
if buy_tickets .lower() == "yes":
    print("SOLD!")
    tickets_remaining -= num_tickets

else:
    print("Thank you anyways {}!!!!".format(username))

print("ALL SOLD OUT! :(")

1 Answer

Asher Orr
seal-mask
.a{fill-rule:evenodd;}techdegree
Asher Orr
Python Development Techdegree Student 5,975 Points

Hi Ava! Try moving your num_tickets = int(input("Hey {} how many tickets would you like to buy? ".format(username))) inside the try block. Like this:

#expect an ValueError and handle it
try:
    num_tickets = int(
        input("Hey {} how many tickets would you like to buy? ".format(username)))
    num_tickets = int(num_tickets)
except ValueError:
    print("Oh No an error! please try again")
else:
    total_price = num_tickets * TICKET_PRICE

In the first version of your code, you ask the user how many tickets they want. You added the int(input, which tells Python to save num_tickets as an integer. Good stuff! The problem is that it's outside the try block.

If someone enters a non-integer for num_tickets, the program crashes because it's outside the try block. Putting it inside that try block tells Python "hey, I think someone might make an error here. Be ready to catch it!"

PS: You should also make this change to your code to avoid the program crashing again:

else:
    total_price = num_tickets * TICKET_PRICE
    print("THE TOTAL IS: {}".format(total_price))

Let me explain why like this:

#try this:
try:
    #ask the user to type how many tickets they want. Make their result an integer, and save it as num tickets.
    num_tickets = int(input("Hey {} how many tickets would you like to buy? ".format(username)))
    #note: since you already made num_tickets an integer, you don't need this code -> num_tickets = int(num_tickets)
#unless they create a ValueError (by entering a non-integer)
except ValueError:
    #print the error message
    print("Oh No an error! please try again")
#but if they don't raise an error message
else:
    #do this:
    total_price = num_tickets * TICKET_PRICE
    #total_price just got defined in the try block.
    #python won't remember it outside the try block (you'll learn more about this later.)
    #so make sure the print statement using total_price is within the try_block.
    print("THE TOTAL IS: {}".format(total_price))
    #otherwise you'll get a NameError
    #keep up the good work!
Ava Jones
Ava Jones
1,434 Points

Thank you so much for helping!