我尝试运行一个带数字的基本提示,然后在其上运行递归函数。
任何负数都会导致递归错误,因为函数无法处理它们。
现在,我已经用Python学习了这样的情况需要一个 "尝试/除"模型。这就是我想出的:
try:
choice = int(input('Enter a number: '))
INSERT RECURSIVE FUNCTION HERE
except RecursionError as err:
print('Error: ', str(err))
这个例外不起作用,因为它仍然以红线显示整个递归过程,我的例外只替换最后一行。我知道我可以通过逻辑轻松解决这个问题,例如:
if choice < 0:
print("Error: Bro, We don't take no Negative Numbers around here.")
然而,我被教导我们通常希望避免&#34;通过逻辑解决错误&#34;在Python中,而不是通过&#34;尝试/除了&#34;模型。
我可以通过&#34;尝试/除了&#34;来拒绝负数。模型而不是&#34; if / else&#34;?
如果你能帮助我理解一种方法来对ValueError做出反应,那将是另一个很好的帮助。
答案 0 :(得分:3)
说,您只想打印正数,如果数字为负,则引发异常
a = int(raw_input())
if a < 0:
myError = ValueError('a should be a positive')
raise myError
print(a)
答案 1 :(得分:1)
“喜欢尝试/除外”的事情是一个指导原则,而不是一个硬性规则。在这种情况下,正如您所发现的那样,它没有任何意义。你应该像正常一样使用if choice < 0:
。
一般来说,有三个理由喜欢try/except
,这里没有一个适用。
作为旁注,新的Python程序员强调“更喜欢尝试/除外”的主要原因是许多程序员来自异常缓慢或不存在的语言,即使在适当的情况下也会偏向于使用它们。 / p>
答案 2 :(得分:1)
try:
choice = int(input('Enter a number: '))
assert choice > 0 # Test if it true
except AssertionError :
print("Number is negative")