【问题标题】:().is_integer() not working().is_integer() 不工作
【发布时间】:2013-06-18 13:31:14
【问题描述】:

这段代码有什么问题:

n = 10
((n/3)).is_integer()

我不明白为什么我不能设置 n = 任何数字并检查它是否为整数。

感谢您的帮助!

python 2.7.4

错误:

Traceback (most recent call last):
  File "/home/userh/Arbeitsfläche/übung.py", line 2, in <module>
    print ((n/3)).is_integer()
AttributeError: 'int' object has no attribute 'is_integer'

【问题讨论】:

  • Traceback(最近一次调用最后):文件“/home/userh/Arbeitsfläche/übung.py”,第 2 行,在 print ((n/3)).is_integer() AttributeError : 'int' 对象没有属性 'is_integer'
  • 你从哪里得知 is_integer() 是一个函数?试试 isinstance(n, int)
  • @Max 非常感谢!我认为 isinstance 适用于各种事情?
  • @frank 好吧,除了你已经复活了一个 6 年前的问题,因为并非所有对象都有 is_integer 函数。整数不会!

标签: python python-2.7 integer


【解决方案1】:

您使用的是 Python 2.7。除非您使用from __future__ import division,否则将两个整数相除将返回您和整数。 is_integer 仅存在于 float 中,因此您的错误。

【讨论】:

    【解决方案2】:

    您收到此错误的原因是您使用整数除法将整数 10 除以 3,结果以 int 实例的形式得到整数 3。然后,您尝试对该结果调用方法 is_integer(),但正如错误消息所述,该方法位于 float 类中,而不是 int 类中。

    快速解决方法是更改​​代码并除以 3.0 而不是 3,这将导致浮点除法并为您提供一个 float 实例,您可以在该实例上像您一样调用 is_integer() 方法正在努力。这样做:

    n = 10
    ((n/3.0)).is_integer()
    

    【讨论】:

      【解决方案3】:

      ...

      当我写这个答案时,没有关于语言的信息。

      但是在python2中你可以使用以下来检查它是否是一个整数

      isinstance( <var>, ( int, long ) )
      

      【讨论】:

      • 当然可以,但是为什么我用 is_integer 得到这个错误:AttributeError: 'int' object has no attribute 'is_integer'
      • 好吧,对于 int 对象没有这样的功能......错误消息说明了它。
      • Dv:在 Python 2.7 中,如果应用于两个整数,则 / 是整数除法。
      【解决方案4】:

      可以使用isdigit,这是Python自己提供的一个很好的功能

      你可以在这里参考文档https://docs.python.org/2/library/stdtypes.html#str.isdigit

          if token.isdigit():
              return int(token)
      

      【讨论】:

      • 此答案仅在尝试确定字符串是否为整数时才有效,因此它似乎无法回答问题。
      【解决方案5】:

      其他答案都这么说,但不是很清楚(恕我直言)。

      在 python 2 中,/ 符号表示“整数除法”当参数是整数时。只为您提供结果的整数部分:

      >>> 10/3
      3
      

      这意味着在(10/3).is_integer() 中,您在3 上调用is_integer(),这是一个整数。这不起作用:

      >>> (3.0).is_integer()
      True
      >>> (3).is_integer()
      AttributeError: 'int' object has no attribute 'is_integer'
      

      您可能想要的是将其中一个数字更改为浮点数:

      >>> (10/3.0).is_integer()
      False
      

      顺便说一句,这是在 python 3 中修复的(这是未来,并且在许多小方面是一种更好的语言)。

      【讨论】:

      • s/fixed/changed/ - 这两种行为都是合理的。
      • @glglgl 抱歉,但不,我强烈不同意。语言是用户界面。如果它让许多用户感到困惑,那就不好了。
      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2013-01-18
      • 2020-01-27
      • 2012-03-27
      • 2018-06-21
      • 1970-01-01
      • 2017-05-11
      相关资源
      最近更新 更多