【问题标题】:How do I use try .. except or if ...else to validate user input? [closed]如何使用 try .. except 或 if ...else 来验证用户输入? [关闭]
【发布时间】:2011-04-05 20:16:27
【问题描述】:

我想限制用户输入,以便提供的 N 服从 N >0N < 100

我应该使用if... else 还是try... except?您能否提供两种方法的示例?

【问题讨论】:

  • 我想你可能在你的情况下想要“和”,而不是“或”。

标签: python


【解决方案1】:

我建议一个组合:)

while True:
    value = raw_input('Value between 0 and 100:')
    try:
       value = int(value)
    except ValueError:
       print 'Valid number, please'
       continue
    if 0 <= value <= 100:
       break
    else:
       print 'Valid range, please: 0-100'

希望对你有帮助。

【讨论】:

  • 当真:?这是什么意思?辛德尔。
  • 实际上是一个无限循环。在没有输入值之前,这段代码不允许程序继续进行。一般来说,它是某种goto 仿真,非常适合此类任务恕我直言。看,循环中有 breakcontinue 语句 - 所以不用担心 - 它会在某个时候停止;)
  • while True: 是一个用于创建无限循环的习语(在@zindel 的示例中,循环一直运行到用户输入一个在允许范围内的数字,所以唯一的方法是通过这个代码块是输入一个有效的整数(或者 Ctrl+C,我猜...)
  • while True: 永远循环,直到遇到 break 或抛出未处理的异常。所以这段代码一直循环,直到0 &lt;= value &lt;= 100 评估为True
  • 明白,谢谢大家。 :)
【解决方案2】:

if/else 在这里可能更合适,因为引发的任何异常都是你自己抛出的(你仍然必须处理它们)。

【讨论】:

    【解决方案3】:

    最简单的方法是 if/else。

    但我可能会同时使用 if/else 和抛出异常进行验证。

    【讨论】:

      【解决方案4】:
      # test value of N
      try:
          N = int(N)
      except ValueError:
          raise ValueError('N must be integer')
      if N < 0 or N > 100:
          NError = ValueError('N must be between 0 and 100, inclusive.')
          raise NError
      

      【讨论】:

      • 欢迎来到 SO!当您发布答案时,请尝试解释一下,即使它是正确的。当有其他回复时,根据您的情况,展示您的优点和缺点。
      猜你喜欢
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      相关资源
      最近更新 更多