如何在Python 2.x中检查输入是字符串还是int?

时间:2015-02-12 19:25:38

标签: python string python-2.x isinstance

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

var = input("var: ")

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

else:
   print "var = number"

这是我提出的代码,但遗憾的是没有工作; 我是python和编程的新手,所以我不知道很多命令, 任何建议将不胜感激^^

5 个答案:

答案 0 :(得分:2)

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

v = raw_input("input: ")

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

答案 1 :(得分:1)

input()将始终为您返回一个字符串(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"
    

答案 2 :(得分:0)

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

>>> 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"

答案 3 :(得分:0)

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

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

简短说明:只是尝试将其转换为数字并查看它是否失败。

示例(未经测试):

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

供参考:

请注意input()函数的语义随Python 3而改变:

答案 4 :(得分:0)

正如@paidhima所说,input函数将始终在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不是一个好习惯,你可以使用python2.x中的raw_input和python3.x中的input一样。

我要再说一遍,因为我不想让你迷惑: 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,我希望这可以帮助你以某种方式。