在Python中拒绝负数作为例外

时间:2015-12-12 20:23:27

标签: python exception negative-number

我尝试运行一个带数字的基本提示,然后在其上运行递归函数。

任何负数都会导致递归错误,因为函数无法处理它们。

现在,我已经用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做出反应,那将是另一个很好的帮助。

3 个答案:

答案 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,这里没有一个适用。

  1. 如果您按顺序执行多个操作,每个操作都会失败,并且您不关心哪个操作失败。在这种情况下,您可以在整个代码序列周围使用try块,从而简化操作。
  2. 如果您希望调用者使用具有duck-typed接口的用户定义类型,该接口不实现任何特定的超类或抽象基类。在编写库代码时,这主要是一个问题。
  3. 如果您希望操作通常成功,则会在失败时抛出异常。在这种情况下,try / except通常会更快。
  4. 作为旁注,新的Python程序员强调“更喜欢尝试/除外”的主要原因是许多程序员来自异常缓慢或不存在的语言,即使在适当的情况下也会偏向于使用它们。 / p>

答案 2 :(得分:1)

try: 
  choice = int(input('Enter a number: '))
  assert choice > 0 # Test if it true
except AssertionError :
  print("Number is negative")