AttributeError: 'int' object has no attribute 'get' 主要发生在你试图调用get()方法时发生。该属性get()方法存在于字典中,必须在字典的数据类型上调用。
在本教程中,我们将看看什么是 AttributeError: 'int' object has no attribute 'get',以及如何通过实例解决这个错误。
什么是AttributeError:'int'对象没有属性'get'?
如果我们调用get()方法,Python 将引发AttributeError: 'int' 对象没有属性 'get'。如果你有一个返回整数而不是字典的方法,这个错误也可能发生。
让我们举一个简单的例子来重现这个错误。
# Method return integer instead of dict
def fetch_data():
output = 100
return output
data = fetch_data()
print(data.get("name"))
输出
AttributeError: 'int' object has no attribute 'get'
在上面的例子中,我们有一个方法 fetch_data()返回一个整数,而不是一个dictionary。
由于我们在整数类型上调用get()方法,我们得到了AttributeError。
我们还可以检查变量类型是否使用了type()方法,并且使用dir()方法,我们还可以打印一个给定对象的所有属性的列表。
# Method return integer instead of dict
def fetch_data():
output = 100
return output
data = fetch_data()
print("The type of the object is ", type(data))
print("List of valid attributes in this object is ", dir(data))
输出
The type of the object is <class 'int'>
List of valid attributes in this object is ['__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__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
如何解决AttributeError: 'int' object has no attribute 'get'?
让我们看看如何解决这个错误。
解决方案1 - 对有效的字典调用get()方法
我们可以通过调用 get()方法来解决这个问题,在有效的字典对象上调用该方法,而不是整数类型。
该 dict.get()方法返回给定键的值。该 get()方法不会抛出KeyError(**如果键不存在);相反,我们会得到 None值或我们在方法中传递的默认值。 get()方法中传递的值或默认值。
# Method returns dict
def fetch_data():
output = {"Name": "Audi", "Release_Date": "2022", "Price": "$45000"}
return output
data = fetch_data()
# Get the price of the car
print(data.get("Price"))
输出
$45000
解决方案 2 - 使用类型检查对象是否属于 dictionary 类型
另一种方法是检查对象是否为 dictionary 类型;我们可以用 type()方法来做。这样,我们就可以在调用方法之前检查对象的数据类型是否正确。 get()方法。
# Method returns dict
def fetch_data():
output = {"Name": "Audi", "Release_Date": "2022", "Price": "$45000"}
return output
data = fetch_data()
# Check if the object is dict
if (type(data) == dict):
print(data.get("Price"))
输出
$45000
解决方案 3 - 使用 hasattr 检查该对象是否有 get 属性
在调用 get()方法之前,我们还可以检查对象是否具有某种属性。即使我们调用一个返回不同数据的外部API,使用 hasattr()方法,我们可以检查该对象是否有一个给定名称的属性。
# Method returns dict
def fetch_data():
output = {"Name": "Audi", "Release_Date": "2022", "Price": "$45000"}
return output
data = fetch_data()
# Check if the object has get attribute
if (hasattr(data, 'get')):
print(data.get("Price"))
输出
$45000
总结
AttributeError: 'int' object has no attribute 'get' 发生在你试图调用get()方法时,会发生AttributeError: 'int' object has no attribute 'get' 。如果调用方法返回一个整数而不是一个字典对象,也会发生这个错误。
我们可以通过调用 get()方法来解决这个错误。我们可以用方法检查对象是否为 dictionary 类型,也可以用 type()方法来检查对象是否为 dictionary 类型,同时,我们可以在执行 get 操作之前,用 hasattr()在执行获取操作之前检查对象是否具有有效的获取属性。