While I was writing a tip calculator in Python, you can check my GitHub
for the full code. I realized that even though I used an
if condition, errors were still happening. The reason is that
the if condition runs after the type
conversion, but the error happens during the conversion
itself.
def get_bill_amount(prompt: str) -> float:
while True:
value = input(prompt).strip()
try:
amount = float(value)
if amount > 0:
return amount
print("Amount must be greater than 0.")
except ValueError:
print("Please enter a valid number.")
Expected user input: a number greater than 0
Type mismatch: when the user enters a string like
abc
Error: the program crashes with
ValueError: could not convert string to float
The key point is that float(value) is a risky operation. If
the conversion fails, Python throws an error before the
if condition is even checked.
Using value.isdigit() may look safe, but it fails for valid
inputs like 12.5, -3, or even
10 with spaces. This is why try/except exists.
if
→ checks logic (rules, range, conditions)
try/except→ catches crashes (invalid operations like type conversion)
Always use if to validate rules, and
try/except to protect your program from crashing.