Reputation: 652
I'm trying to run a basic prompt that takes a number, then runs a recursive function on it.
Any negative number causes a recursion error, for the function being unable to handle them.
Now, I've learned with Python that situations like this call for a "try/except" model. Here's what I came up with:
try:
choice = int(input('Enter a number: '))
INSERT RECURSIVE FUNCTION HERE
except RecursionError as err:
print('Error: ', str(err))
This exception doesn't work, as it still shows the entire recursive process in red lines, with my exception only replacing the final line. I know I could easily solve this by logic, for example:
if choice < 0:
print("Error: Bro, We don't take no Negative Numbers around here.")
However, I was taught we generally want to avoid "solving errors by Logic" in Python, instead working via the "try/except" model.
What could I do to reject negative numbers via a "try/except" model instead of an "if/else"?
If you can help me understand a way to make this react to ValueError, that'd be another great help.
Upvotes: 7
Views: 51488
Reputation: 392
Say, you want to print only positive numbers and if the number is negative you raise an exception
a = int(raw_input())
if a < 0:
myError = ValueError('a should be a positive number')
raise myError
print(a)
Upvotes: 7
Reputation: 21
try:
choice = int(input('Enter a number: '))
assert choice > 0 # Test if it true
except AssertionError :
print("Number is negative")
Upvotes: 2
Reputation: 39461
The "prefer try/except" thing is a guideline, not a hard and fast rule. In this case, it doesn't make any sense, as you've discovered. You should use if choice < 0:
like normal.
In general there are three reasons to prefer try/except
, none of which apply here.
As a side note, the main reason why "prefer try/except" is emphasized to new Python programmers is that many programmers come from languages where exceptions are slow or nonexistent, making them biased against using them, even when appropriate.
Upvotes: 3