【问题标题】:How to check if a variable is an integer or a string? [duplicate]如何检查变量是整数还是字符串? [复制]
【发布时间】:2013-05-10 18:06:01
【问题描述】:

我有一个包含几个命令的应用程序。 当您输入某个命令时,您必须输入有关某事/某人的附加信息。 现在该信息必须是严格的整数或字符串,具体取决于具体情况。

但是,无论您使用 raw_input() 在 Python 中键入什么,实际上都是一个字符串,无论如何,更具体地说,我将如何快速且不尝试...除非查看变量是由数字还是字符组成的?

【问题讨论】:

  • 你可以这样做:"0".isdigit()。文档:docs.python.org/2/library/stdtypes.html#str.isdigit
  • 在 Python 中检查对象的类型是个坏主意——它使 Python 的动态特性变得不那么有用。 请求宽恕比请求许可更容易。
  • 这里为什么讨厌try..except?这正是您将使用的异常处理用于
  • 主要是我不懂try...除了...
  • isinstance(在下面的答案中)是一个很好的方法,只需要知道变量的内容是字符串还是整数。当用户选项可以是任何一个时,就会发生这种情况。

标签: python variables python-2.7


【解决方案1】:

在我看来你有两个选择:

  • 尝试将其转换为int,但捕获异常:

    try:
        value = int(value)
    except ValueError:
        pass  # it was a string, not an int.
    

    这是请求宽恕的方法。

  • 显式测试字符串中是否只有数字:

    value.isdigit()
    

    str.isdigit() 仅当字符串中的所有字符都是数字时才返回True (0-9)。

    unicode / Python 3 str 类型等效为unicode.isdecimal() / str.isdecimal();只有 Unicode 小数可以转换为整数,因为并非所有数字都有实际的整数值(例如,U+00B2 SUPERSCRIPT 2 是数字,但不是小数)。

    这通常被称为“询问许可”方法,或“先看后看”。

后者不会检测到所有有效的int() 值,因为int() 值中也允许使用空格和+-。第一种形式很乐意接受' +10 ' 作为数字,后者不会。

如果您希望用户通常会输入一个整数,请使用第一种形式。在这种情况下,请求宽恕比请求许可更容易(也更快)。

【讨论】:

  • 还有其他选项。最好说这两个选项正是您自己推荐的。
  • @android:其他选项在大多数情况下都是多余的。然而,量化它。
  • 问题是我不是很懂try...except,所以如果你能解释得更透彻,那就太好了。
  • @user2154354:操作可以抛出异常;这些切断了正常的代码流,它们从堆栈中“跌落”;函数立即返回,直到某些东西“捕获”异常。 try:..except: 语句进行了捕捉。 int() 可以抛出 ValueError 异常,但我们专门再次捕获它以检测字符串无法转换为整数。有关详细信息,请参阅Python tutorial
  • @Veedrac:确实,现在已经指出了。
【解决方案2】:

如果你想检查它是什么:

>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False

如果你想从 raw_input 获取整数

>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
   except: pass

>>>isinstance(x,int)
True

【讨论】:

【解决方案3】:

isdigit method of the str type 返回True iff 给定的字符串只是一个或多个数字。如果不是,您知道该字符串应该被视为一个字符串。

【讨论】:

  • isdigit() 为负数返回 False
【解决方案4】:

根据您对短期的定义,您可以使用以下选项之一:

【讨论】:

    【解决方案5】:

    不要检查。继续假设它是正确的输入,如果不是,则捕获异常。

    intresult = None
    while intresult is None:
        input = raw_input()
        try: intresult = int(input)
        except ValueError: pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2020-07-24
      相关资源
      最近更新 更多