使用try / except进行输入验证?

时间:2017-11-13 18:34:01

标签: python validation loops

我正在尝试验证用户输入以检查,当他们输入他们的名字时,它超过2个字符并且是字母。我试图使用try / except来做这个,因为我被告知这是用户验证的最佳循环。不幸的是,如果用户输入的字符不是字母,则没有任何反应,并且程序正常进行。我也不知道如何在try / except循环中检查输入是否超过2个字符,因为它对我来说是一个新手。非常感谢任何帮助。

    list = []
    def users_name():
      while True:
        try:
          name = str(input("Please enter your first name: "))
          list.append(name)
          break
        except TypeError:
          print("Letters only please.")
          continue
        except EOFError:
          print("Please input something....")
          continue

    users_name()

2 个答案:

答案 0 :(得分:2)

由于continue块中的catch子句,您的程序将继续运行。

您还可以检查他们输入的内容的长度是否超过两个字符。

list = []
def users_name():
  while True: # Never ending loop
    try:
      name = str(input("Please enter your first name: "))
      if (len(name) > 2)
          list.append(name)
      break
    except TypeError:
      print("Letters only please.")
      continue # This causes it to continue
    except EOFError:
      print("Please input something....")
      continue # This causes it to continue

users_name()

另外,你可能想以某种方式停止循环。插入数组时可能会放入break子句吗?

if(len(name) > 2)
    list.append(name)
    break
...

要检查输入是数字还是字母字符,请使用isdigit()isalpha()

if a.isalpha():
    #do something
elif a.isdigit():
    #do something

您的代码将如下所示:

list = []
def users_name():
while True: # Never ending loop
  try:
    name = str(input("Please enter your first name: "))
    if (len(name) > 2 && name.isalpha()):
        list.append(name)
        break
    else:
        raise TypeError
  except TypeError:
    print("Letters only please.")
    continue # This causes it to continue
  except EOFError:
    print("Please input something....")
    continue # This causes it to continue

users_name()

此外,如果您使用的是Python< 3考虑使用raw_input()input()实际上会将输入评估为Python代码。

答案 1 :(得分:0)

要检查String的长度,可以使用方法len()来获取其字符长度。然后,您可以选择大于2或所需长度的那些。

要检查字符串是否只包含字母字符,可以使用str.isalpha()方法进行检查。

因此,如果您检查len(name) > 2 and name.isalpha()将帮助您过滤那些与您想要的不匹配的字符串:

>>> name = "MyName"
>>> len(name) > 2 and name.isalpha()
True
>>> wrong_name = "My42Name"
>>> len(wrong_name) > 2 and wrong_name.isalpha()
False
>>> short_name = "A"
>>> len(short_name) > 2 and short_name.isalpha()
False