如何在Python 2.7中检查原始输入是否为整数?

16

有没有一种方法可以用来检查raw_input是否为整数?

在网上研究后,我找到了这种方法:

print isinstance(raw_input("number: ")), int)

但是当我运行它并输入例如 4,我得到了FALSE。我对Python比较新,任何帮助都将不胜感激。

5个回答

24

isinstance(raw_input("number: "), int) 始终返回False,因为raw_input返回字符串对象作为结果。

使用 try: int(...) ... except ValueError

number = raw_input("number: ")
try:
    int(number)
except ValueError:
    print False
else:
    print True

或者使用str.isdigit函数:

print raw_input("number: ").isdigit()

注意 第二个示例对于 -4 的结果是 False,因为它包含非数字字符。如果您只想要数字,则请使用第二个示例。

更新 正如 J.F. Sebastian 所指出的那样,str.isdigit 是与语言环境相关的(在 Windows 上)。它可能会返回 True,即使对于输入值,int() 会引发 ValueError 异常。

>>> import locale
>>> locale.getpreferredencoding()
'cp1252'
>>> '\xb2'.isdigit()  # SUPERSCRIPT TWO
False
>>> locale.setlocale(locale.LC_ALL, 'Danish')
'Danish_Denmark.1252'
>>> '\xb2'.isdigit()
True
>>> int('\xb2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '\xb2'

或者,如果他们想将变量转换为数字,“number = int(number)” - SethMMorton
1
str.isdigit() 可能会受到区域设置的影响(因为微软),即使 int() 会因输入而引发 ValueError,它也可能返回 True - jfs
@J.F.Sebastian,raw_input() 返回的是 str 对象,而不是 unicode 对象。因此我认为 str.isdigit 会按预期工作。你能给我一个例子吗? - falsetru
1
使用cp1252语言环境,而不是cp1251。PYTHONIOENCODING与此无关。 - jfs
1
@J.F.Sebastian,是的,我检查过了:http://i.imgur.com/BglM8Ol.png。我忘记粘贴那部分了。再次感谢你 :) - falsetru
显示剩余6条评论

8
你可以这样做:
try:
    val = int(raw_input("number: "))
except ValueError:
    # not an integer

1
尝试使用此方法.isdigit(),请参见以下示例。
user_input = raw_input()
if user_input.isdigit():
    print "That is a number."

else:
    print "That is not a number."

如果您需要将输入保留为数字以供进一步使用,可以添加类似以下内容的代码:

new_variable = int(user_input)

0
def checker():
  inputt = raw_input("how many u want to check?")
  try:
      return int(inputt)
  except ValueError:
      print "Error!, pls enter int!"
      return checker()

0

这是我的解决方案

`x =raw_input('Enter a number or a word: ')
y = x.isdigit()
if (y == False):
    for i in range(len(x)):
        print('I'),
else:
    for i in range(int(x)):
        print('I'),

`


请考虑编辑您的帖子,以解释代码如何工作。仅提供代码答案并不总能清楚地告诉OP如何解决问题。 - SuperBiasedMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接