我应该使用异常来解决糟糕的用户输入吗?

时间:2017-11-18 17:07:37

标签: python exception exception-handling

我总是了解到,异常只应该抛在真实的特殊情况下,而不能用于可预期的错误情况。但在Exception Handling教程中,我找到了这个例子:

def do_stuff_with_number(n):
          print(n)

  the_list = (1, 2, 3, 4, 5)

  for i in range(20):
      try:
          do_stuff_with_number(the_list[i])
      except IndexError: # Raised when accessing a non-existing index of a list
          do_stuff_with_number(0)

以下是用于验证和解决用户输入错误的异常。这不是异常的一个非常糟糕的例子吗?或者是否存在以这种方式使用它的情况?

3 个答案:

答案 0 :(得分:1)

异常是大多数错误的好方法,因为它们主要用于立即终止程序。关于用户输入,可能更容易重新询问用户另一个输入。

答案 1 :(得分:0)

例外是处理意外情况的好方法。虽然这种形式很好,但在生产环境中,最好明确地处理最常见的异常

答案 2 :(得分:0)

这不是“非常糟糕”的例子。异常旨在提高对不应发生的事情的关注,例如访问不存在的值。

我唯一可以争论的是处理异常的方式。为什么调用相同的函数但使用0默认参数?如果the_list本身(旁注:它是tuple而不是列表!)包含0怎么办?如果元素存在但意外呢?

作为一般角色,不要让程序失败:如果你知道某个特定的东西不行,那就抛出一个错误!调用者应始终捕获该错误并处理它做有用的事情。最后,请注意try位于for循环内,这意味着您不关心do_stuff_with_number()函数是否无法处理某些元组值(或全部)。我认为这样的情况可以在循环if时使用the_list来处理。