如何检查变量是否为整数?
当前回答
你可以使用这个函数:
def is_int(x):
if type(x) == int:
return True
return False
测试:
print is_int('7.0') # False
print is_int(7.0) # False
print is_int(7.5) # False
print is_int(-1) # True
其他回答
如果你想检查一个字符串是否只由数字组成,但转换为int型没有帮助,你总是可以使用regex。
import re
x = "01234"
match = re.search("^\d+$", x)
try: x = match.group(0)
except AttributeError: print("not a valid number")
Result: x == "01234"
在这种情况下,如果x是"hello",将其转换为数值类型会抛出ValueError,但数据也会在此过程中丢失。使用正则表达式并捕获AttributeError将允许您确认字符串中的数字字符,例如,前导0。
如果你不想让它抛出AttributeError,而只是想寻找更具体的问题,你可以改变正则表达式,只检查匹配:
import re
x = "h01234"
match = re.search("\D", x)
if not match:
print("x is a number")
else:
print("encountered a problem at character:", match.group(0))
Result: "encountered a problem at character: h"
这实际上显示了问题发生的位置,而不使用异常。同样,这不是为了测试类型,而是测试字符本身。这比简单地检查类型要灵活得多,特别是当类型之间的转换可能会丢失重要的字符串数据时,比如前导0。
为什么不直接检查您想检查的值是否等于它本身转换为一个整数,如下所示?
def isInt(val):
return val == int(val)
这里有一个简单的例子,你可以确定一个整数
def is_int(x):
print round(x),
if x == round(x):
print 'True',
else:
print 'False'
is_int(7.0) # True
is_int(7.5) # False
is_int(-1) # True
当这样一个基本的,有效的,我认为是平凡的问题被提出时,看到如此激烈的讨论真是令人震惊。
有些人指出,针对int(和long)的类型检查可能会在遇到大十进制数的情况下出错。完全正确。
有些人指出,你应该“只做x + 1,看看是否会失败”。好吧,一方面,这也适用于浮点数,另一方面,很容易构造一个肯定不是很数字的类,但以某种方式定义了+运算符。
我不同意许多大力宣称你不应该检查类型的帖子。好吧,GvR曾经说过这样的话,在纯理论中,这可能是对的,但在实践中,isinstance通常是有用的(那是一段时间前,没有链接;你可以在类似这篇文章中阅读GvR对相关问题的看法)。
有趣的是,很多人似乎认为OP的意图是检查给定x的类型是否为数值整数类型——我所理解的是我通常在使用OP的话时的意思:x是否代表整数。这是非常重要的:比如问别人他们想选多少个项目,你可能想检查你得到的是一个非负整数。这样的用例比比皆是。
在我看来,重要的是要看到(1)类型检查只是程序正确性的一种度量,而且通常是相当粗略的,因为(2)通常是有边界的值有意义,而越界的值毫无意义。有时,只有一些间歇值是有意义的——比如考虑所有的数字,在给定的情况下,只有那些实数(非复数)、整数是可能的。
有趣的是,似乎没有人提到检查x == math。楼层(x)。如果这应该给出一些大的十进制类的错误,那么也许是时候重新思考OOP范式了。还有PEP 357考虑了如何使用不那么明显是整数但肯定是整数的值作为列表索引。我不确定我是否喜欢这个解决方案。
与其把事情过分复杂化,不如干脆简单一点
if type(var) is int:
推荐文章
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?
- 使用Python请求的异步请求
- 如何检查一个对象是否是python中的生成器对象?
- 如何从Python包内读取(静态)文件?