【问题标题】:Python input validation for both integer and string整数和字符串的 Python 输入验证
【发布时间】:2012-05-10 05:18:32
【问题描述】:

我是编程新手,在进行输入验证时遇到问题。 我的程序需要输入从 1 到 10 的数字或字母 y,但似乎我无法为此执行错误处理程序。

def checkingInput():
    while True:
        try:
            a = input()
            if 10 >= a >= 1 or a == 'y':
                return value
            else:
                print('Invalid input!')
        except NameError:
            print('Name error!Please try again!')
        except SyntaxError:
            print('Syntax Error!Please try again!')

【问题讨论】:

  • 由于print(),我认为您正在使用python 3,但您能确认一下吗?
  • SyntaxError 不是一个通常在运行时发生的异常。
  • 我认为你想要ValueError 而不是SyntaxError。此外,您无法将 intsstrings 进行比较,因此您应该将您的线路更改为 if a == 'y' or 1 <= int(a) <= 10
  • 另外,如果这是 python 3,你也不需要捕获 NameError

标签: python input


【解决方案1】:

按照 jamylak 的建议,将 if 条件更改为:

if a == 'y' or 1 <= int(a) <= 10:

程序:

def checkingInput():
    while True:
        try:
            a = input('enter')
            if a == 'y' or 1 <= int(a) <= 10:
                return a
            else:
                print('Invalid input!')
        except ValueError:
            print('Value error! Please try again!')

【讨论】:

  • 如果a'y' 则不起作用,因为if 语句从左到右检查条件并且无法将'y' 转换为int。改为这样做:if a == 'y' or 1 &lt;= int(a) &lt;= 10
  • @jamylak 谢谢,我真的不知道If 使用从左到右检查。
  • +1 我也不知道这是否是讽刺......如果是,我很抱歉,但我只是认为值得为其他阅读本文的人解释。
  • @jamylak 不,这不是讽刺,它很有帮助。
  • 顺便说一句:正确的样式要求名称为check_input - 标点符号(全小写,中间有下划线)是 Python 社区的偏好,但所有程序员都更喜欢名称 @987654331 @ over checking: 因为函数做了一些事情,所以给它一个必要的名字,而不是描述性的。
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多