我总是了解到,异常只应该抛在真实的特殊情况下,而不能用于可预期的错误情况。但在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)
以下是用于验证和解决用户输入错误的异常。这不是异常的一个非常糟糕的例子吗?或者是否存在以这种方式使用它的情况?
答案 0 :(得分:1)
异常是大多数错误的好方法,因为它们主要用于立即终止程序。关于用户输入,可能更容易重新询问用户另一个输入。
答案 1 :(得分:0)
例外是处理意外情况的好方法。虽然这种形式很好,但在生产环境中,最好明确地处理最常见的异常
答案 2 :(得分:0)
这不是“非常糟糕”的例子。异常旨在提高对不应发生的事情的关注,例如访问不存在的值。
我唯一可以争论的是处理异常的方式。为什么调用相同的函数但使用0
默认参数?如果the_list
本身(旁注:它是tuple而不是列表!)包含0
怎么办?如果元素存在但意外呢?
作为一般角色,不要让程序失败:如果你知道某个特定的东西不行,那就抛出一个错误!调用者应始终捕获该错误并处理它做有用的事情。最后,请注意try
位于for
循环内,这意味着您不关心do_stuff_with_number()
函数是否无法处理某些元组值(或全部)。我认为这样的情况可以在循环if
时使用the_list
来处理。