【问题标题】:How do I check if an input is a string or int in Python 2.x?如何在 Python 2.x 中检查输入是字符串还是 int?
【发布时间】:2015-04-13 16:41:44
【问题描述】:

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

var = input("var: ")

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

else:
   print "var = number"

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

【问题讨论】:

  • “不起作用”是什么意思?
  • 编辑:哎呀,raw_input 总是会返回一个字符串,input 会进行 eval.. 原文:input 函数总是会返回一个字符串,即使您输入只有数字。
  • 任何输入都会返回'var = word',即使我输入了一个字符串。
  • @BhargavRao,谢谢,我在输入后不久就注意到了。
  • @Manakin raw_input 是 Python2 中的正确方式

标签: python string python-2.x isinstance


【解决方案1】:

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

v = raw_input("input: ")

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

【讨论】:

    【解决方案2】:

    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"
      

    【讨论】:

      【解决方案3】:

      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 的变化而变化:

      【讨论】:

      • 稍作改动后,您的代码对我有用。我把下面的打印放在除了 ValueError 上面的行中:这给了我一个完美的结果。非常感谢!
      • 当输入是字符串时,这会同时打印stringnumber 输出。将最后一个打印放在else: 语句中,它应该可以完美运行。 @Manakin
      • 感谢您的来信。我改编了 sn-p。
      【解决方案4】:

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

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

      【讨论】:

      • 不要使用type 来检查条件中的类型,使用isinstance。无论如何,如果你使用raw_input,检查x的类型是没有意义的,因为它总是一个字符串。
      【解决方案5】:

      正如@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 不是一个好习惯,您可以使用raw_input,它在python2.x 中的工作方式与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,我希望这对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-05-03
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多