避免在Python中使用裸露的except

在Python中,键盘中断和系统退出是通过异常(即KeyboardInterruptSystemExit)传播的。因此,在Python中使用裸露的except子句会捕获用户按下Ctrl + C等操作。

考虑以下代码。如果用户尝试退出程序,键盘中断将被except子句捕获。这是不可取的,因为它会阻止用户实际退出程序,直到他们提供有效的输入。

while True:
  try:
    s = input('输入一个数字:')
    x = int(s)
  except:
    print('不是一个数字,请重试!')

防止这种情况发生的一种方法是使用Exception,这将确保用户不会被困住。这种方法的唯一问题是Exception是通用的,几乎可以处理任何被抛出的异常。

while True:
  try:
    s = input('输入一个数字:')
    x = int(s)
  except Exception:
    print('不是一个数字,请重试!')

处理错误的正确方式是指定您期望的错误类型。例如,在此代码示例中,ValueError是合适的。

while True:
  try:
    s = input('输入一个数字:')
    x = int(s)
  except ValueError:
    print('不是一个数字,请重试!')

作为一个经验法则,您应该只使用带有适当错误类型的except来处理预期的失败状态。对于意外错误,让程序自然地失败并退出可能更好。