【问题标题】:Exception handling - how to handle invalid datatype in user input?异常处理 - 如何处理用户输入中的无效数据类型?
【发布时间】:2015-02-07 02:46:29
【问题描述】:

作为编程新手,我正在尝试输入作为字符串输入的名称。如果我输入字符串以外的任何内容,则错误应显示为无效输入类型。如何实现?

【问题讨论】:

  • 使用raw_input() (Python 2) 或input() (Python 3) 函数,返回总是一个字符串,而不是任何其他类型。
  • 你能发布你到目前为止的代码吗?另外,“字符串以外的任何东西”到底是什么意思?

标签: python


【解决方案1】:
  1. 通过raw_input() (Python 2) 或input() (Python 3) 获取用户输入。
  2. 变量nameTypestring,所以我们必须使用字符串方法来验证用户输入的字符串。
  3. 使用isalpha()字符串方法检查用户输入的字符串是否有效。

代码:

name = raw_input("Enter your Last Name:")
if not name.isalpha():
    print "Enter only alpha values."

输出:

:~/Desktop/stackoverflow$ python 5.py 
Enter your Last Name:vivek
:~/Desktop/stackoverflow$ python 5.py 
Enter your Last Name:123
Enter only alpha values.
:~/Desktop/stackoverflow$ python 5.py 
Enter your Last Name:vivek 123
Enter only alpha values.

检查用户字符串的其他字符串方法是整数或字母或两者兼而有之

>>> "123".isalnum()
True
>>> "123a".isalnum()
True
>>> "123abc".isalnum()
True
>>> "123abc".isalpha()
False
>>> "123abc".isdigit()
False
>>> "123".isdigit()
True
>>> "123".isalpha()
False

通过类型转换和异常方法

例如对于无效输入:

>>> a = "123a"
>>> try:
...    a = int(a)
... except ValueError:
...    print "User string is not number"
... 
User string is not number

例如对于有效输入:

>>> a = "123"
>>> try:
...    a = int(a)
... except ValueError:
...    print "User string is not number"
... 
>>> print a
123
>>> type(a)
<type 'int'>
>>>

如果用户输入无效值,要求用户一次又一次地输入值。

代码:

while 1:
    try:
        age = int(raw_input("what is your age?: "))
        break
    except ValueError:
        print "Enter only digit."
        continue

print "age:", age

输出:

vivek@vivek:~/Desktop/stackoverflow$ python 5.py 
what is your age?: test
Enter only digit.
what is your age?: 123test
Enter only digit.
what is your age?: 24
age: 24

【讨论】:

  • 感谢您的快速回复。我在哪里可以在构建功能中获得这些?我也在尝试整数..整数是否有类似的功能...如果不是整数显示错误
  • 是的,使用isdigit()字符串方法检查整数值或使用try except进行类型转换。
  • 我收到错误 AttributeError: 'int' object has no attribute 'isdigit' 当我使用 isdigit() 我的代码是 age = int (input ("Enter age:")) 如果不是年龄。 isdigit(): print ("只输入数字")
  • 是的,正确,您正在将用户输入从 string 转换为 int,即在语句 `age = int (input ("Enter age:"))` 中进行类型转换。 isdigit() 是字符串方法,而不是整数方法。从您的代码中删除类型转换并检查。或者如果用户输入任何其他值而不是整数,则对现有代码使用异常处理。
  • 感谢您的帮助。我尝试使用 try except 代码,但它没有打印打印值。这是我的代码...请检查并让我知道我在编码中出错的地方。抱歉打扰我还在学习.. age = int (input ("Enter age:")) try: age = int (age) except ValueError: print ("Entered value is not a number")
【解决方案2】:

你可以这样写一个 if 语句:

if not entry.isalpha():
   print ("Invalid entry!")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多