如何检查变量是否为整数?
当前回答
如果您正在从一个文件中读取数据,并且您有一个具有多种数据类型值的数组或字典,那么以下内容将很有用。 只需检查变量是否可以类型转换为int(或您想强制执行的任何其他数据类型)。
try :
int(a);
#Variable a is int
except ValueError :
# Variable a is not an int
其他回答
从来没有。检查。类型。
这样做。总是这样。
try:
some operation that "requires" an integer
except TypeError, e:
it wasn't an integer, fail.
为什么不试试这样的方法呢:
if x%1 == 0:
为什么不直接检查您想检查的值是否等于它本身转换为一个整数,如下所示?
def isInt(val):
return val == int(val)
如果你要这么做,那就这么做
isinstance(<var>, int)
除非你用的是python2。X是你想要的
isinstance(<var>, (int, long))
不要使用type。在Python中,这几乎从来都不是正确的答案,因为它阻碍了多态性的所有灵活性。例如,如果你继承int类型,你的新类应该注册为int类型,这种类型是不行的:
class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True
这遵循了Python的强多态性:您应该允许任何行为类似int型的对象,而不是强制它是int型。
BUT
然而,经典的Python心态是请求原谅比请求许可更容易。换句话说,不要检查x是否是整数;假设它是,如果不是,则捕获异常结果:
try:
x += 1
except TypeError:
...
这种心态正慢慢被抽象基类的使用所取代,抽象基类允许您准确地注册对象应该具有的属性(添加哪些属性?乘?加倍?)通过使它继承一个特殊构造的类。这将是最好的解决方案,因为它将允许那些具有必要和足够属性的对象,但你必须阅读如何使用它的文档。
下面是这里提到的不同方法的总结:
Int (x) == x 尝试x = operator.index(x) isinstance (x, int) isinstance (x, numbers.Integral)
下面是它们如何应用于各种具有整数值的数值类型:
你可以看到它们不是100%一致的。Fraction和Rational在概念上是相同的,但是一个提供了.index()方法,而另一个没有。复杂类型不喜欢转换为int,即使实部是整数,虚部是0。
(np.int8|16|32|64(5)表示np.int8(5), np.int32(5)等行为相同)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录