“ int”对象没有属性“ variable”的常见原因?

时间:2018-10-30 01:49:15

标签: python python-3.x tkinter

鉴于关于 <textarea></textarea> 的堆栈溢出问题如此之多,仅在此类主题错误消息的特定情况下太具体了,我想知道我需要在任何涉及此类错误消息的给定场景。

简而言之,该网络上没有一个问题要求对所述错误消息进行广泛的推理,我想这里的许多读者都希望研究这类问题,因为它是如此用户经常问相同的问题,但问题和答案过于特定于该特定领域而无用。总体而言,此网站上的许多类似问题都太过特定于某人代码的特定上下文。

我想确保此问题的答案能够回答几乎所有有关该错误消息的给定情况。对于这样一个常见问题,我希望在这里解决大多数'int' object has no attribute 'variable'问题。

1 个答案:

答案 0 :(得分:2)

  

对于这样一个常见问题,我希望大多数“ int”   对象没有此处要解决的属性变量问题。

这是我的尝试。首先,这不是最好的表征:

'int' object has no attribute 'variable'

我看到的大多数示例都具有以下形式:

'int' object has no attribute 'method'

并且是由于在int未实现的int上调用方法引起的:

>>> x = 4
>>> x.length()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'length'
>>> 

int类确实具有方法:

>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__',
'__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__',
'__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__',
'__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__',
'__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__',
'__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__',
'__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__',
'__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
'__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__',
'__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator',
'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> 

您可以给他们打电话:

>>> help(int.bit_length)
Help on method_descriptor:

bit_length(...)
    int.bit_length() -> int

    Number of bits necessary to represent self in binary.
    >>> bin(37)
    '0b100101'
    >>> (37).bit_length()
    6

>>> 

其中向我们展示了如何在int上调用方法而不会将句点与小数点混淆:

>>> (128).bit_length()
8
>>>

但是在大​​多数情况下,这不是有人试图在int上调用方法,而是int是错误消息的接收者,该消息是针对另一种对象类型的。例如,这是一个常见错误:

TypeError: 'int' object has no attribute '__getitem__'

当您尝试对int下标时,这在Python2中出现了:

>>> x = 4
>>> x[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
>>> 

Python3提供了更有用的消息TypeError: 'int' object is not subscriptable

如果您重复使用相同的变量名来保存不同类型的数据,有时可能会发生这种情况-应避免这种做法。

如果遇到类似"AttributeError: 'int' object has no attribute 'append'"的错误,请考虑哪种类型的对象响应append()list可以,所以在代码的某个地方,我以为我有一个append()的{​​{1}}叫int