如何检查 Python 2.x 中的输入是字符串还是整数?

How do I check if an input is a string or int in Python 2.x?

我正在尝试检查输入的是单词还是数字。

var = input("var: ")

if isinstance(var, str):
    print "var = word"

else:
   print "var = number"

这是我想出的代码,但遗憾的是它不起作用; 我是 python 和一般编程的新手,所以我不知道很多命令, 任何建议将不胜感激^^

要检查变量类型,您可以执行以下操作:

>>> x = 10
>>> type(x)
<type 'int'>

对于字符串:

>>> y = "hi"
>>> type(y)
<type 'str'>

使用isinstance

x = raw_input("var: ")
try:
    int(x)
except ValueError:
    print "string"
else: 
    print "int"

input() 总是 return 给你一个字符串(str 类型)。您可以对该字符串执行多项操作以检查它是否为 int

  1. 您可以尝试将该字符串转换为 int:

    var = input("var: ")
    try:
        var = int(var)
    except ValueError:
        print "var is a str"
    print "var is an int"
    
  2. 您可以使用正则表达式来检查字符串是否仅包含数字(如果您的 int 是十进制,对于其他基数,您必须使用适当的符号):

    import re
    var = input("var: ")
    if re.match(r'^\d+$', var):
        print "var is an int"
    else:
        print "var is a str"
    

input() 将在将您的输入交给您之前对其进行评估。也就是说,如果用户输入 exit(),您的应用程序将退出。从安全的角度来看,这是不希望的。您可能希望改用 raw_input()。在这种情况下,您可以期望返回值是一个字符串。

如果您仍想检查字符串内容是否可转换为(整数)数字,请按照此处讨论的方法进行操作:

  • How do I check if a string is a number (float) in Python?

一个简短的概述:尝试将其转换为数字,看看是否失败。

示例(未经测试):

value = raw_input()
try:
    int(value)
    print "it's an integer number"
except ValueError:
    print "it's a string"

供参考:

注意 input() 函数的语义随着 Python 3:

正如@paidhima 所说,input 函数将始终return python 3.x 中的字符串。 示例:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> var = input("var: ")
var: 12
>>> var
'12'
>>>type(var)
<class 'str'>
>>> 

如果我执行以下操作:

>>> var = input("var: ")
var: aa
>>> var
'aa'
>>> type(var)
<class 'str'>
>>>

它们都是字符串,因为让程序决定是给我们一个字符串还是一个整数不是一个好主意,我们希望我们在程序中构建的逻辑来处理它。 在 python3.x 你的例子是行不通的,但你可以试试这个:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

var = input('var: ')

# we try to conver the string that we got
# in to an intiger 
try:
    # if we can convert it we store it in the same
    # variable
    var = int(var)
except ValueError:
    # if we can't convert we will get 'ValueError'
    # and we just pass it 
    pass


# now we can use your code 
if isinstance(var, str):
    print("var = word")

else:
    print("var = number")
# notice the use of 'print()', in python3 the 'print is no longer 
# a statement, it's a function

现在使用 python2.x 回到您的脚本。 正如我上面所说,使用函数 input 不是一个好习惯,您可以使用 raw_input 在 python2.x 中的作用与 input 在 python 中的作用相同3.x.

我要再说一遍,因为我不想混淆你: Python2.x:

input 
# evaluates the expression(the input ) and returns what
# can make from it, if it can make an integer it will make one
# if not it will keep it as a string

raw_input
# it will always return the expression(the input ) as a string for 
# security reasons and compatibility reasons

Python3.x

 input
 # it will always return the expression(the input ) as a string for 
 # security reasons and compatibility reasons

注意,python3.x中没有raw_input.

您的代码应该可以正常工作,在 python2.x 中,确保您使用正确 python,我希望这在某种程度上对您有所帮助。

你试过了吗str.isdigit()? 例如:

v = raw_input("input: ")

if v.isdigit():
    int(v)
    print "int"
else:
    print "string"