AttributeError: ‘str’ Object Has No Attribute ‘x’:字符串对象没有属性x的完美解决方法 大家好,我是默语,擅长全栈开发、运维和人工智能技术。...其中,AttributeError是比较常见的一种。当你试图访问一个对象的属性,但该对象并不具备这个属性时,就会抛出这个错误。...错误示例 当我们试图访问一个字符串对象的不存在属性时,就会出现AttributeError。例如: my_string = "Hello, World!"...错误的成因 这个错误通常有以下几种成因: 2.1 访问不存在的属性 ❌ Python字符串对象没有名为x的属性。当你尝试访问一个字符串对象的不存在属性时,就会抛出这个错误。...-加强单元测试:为关键功能编写单元测试,以确保在变化或重构代码时不会引入新的错误。
,而不是字典里这带来了两个直接的好处:属性访问更快:直接通过数组偏移量访问,不需要哈希查找内存占用更少:没有 __dict__ 的开销(每个实例至少节省一个字典的内存)属性存储更紧凑(类似 C 结构体)...__dict__)} bytes") except AttributeError as e: print(f"Slots对象没有__dict__属性:{e}")if __name__...== "__main__": main()输出如下:测试普通类:内存占用(MB): 179.71对象创建时间(秒): 1.08属性访问时间(秒): 0.08测试使用 __slots__ 的类:内存占用...单个对象大小对比:普通对象: 48 bytes普通对象的__dict__: 104 bytes普通对象总大小: 152 bytesSlots对象: 64 bytesSlots对象没有__dict__属性...:'OrderWithSlots' object has no attribute '__dict__'这里注意到,使用了 __slots__ 的类没有 __dict__ 属性,这是因为它的属性是直接存储在数组中的
dict1 = {'a':1,'b':2} print(dict1['c']) --------------------------------------------- >>> print(dict1...属性错误,调用对象不存在的一个方法属性时将报这个错误。...(str1.append('f')) >>>AttributeError: 'str' object has no attribute 'append' UnicodeDecodeError 解码错误,...历史文章推荐: 软件测试工程师应该被尊重!...API测试| 了解API接口测试| API接口测试指南 Fiddler工作原理 python中常见关于Excel表格读写操作 遇到一个新项目怎么办,不要慌,乘风破浪!
17 else: 18 print('测试失败!')...= 33: 28 print('测试失败!') 29 elif s != 7986: 30 print('测试失败!')...四 面向对象高级编程 4.1 __slots__ 创建实例后,可动态实例绑定任何属性和方法。...(a) a, b = b, a + b return L 相应的,还有__setitem__()方法,把对象视作list或dict来对集合赋值。...AttributeError: 'Dict' object has no attribute 'empty' ''' def __init__(self, **kw):
此外,如果把对象看成dict,__getitem__()的参数也可能是一个可以作key的object,例如str。...AttributeError: 'Student' object has no attribute 'score' 错误信息很清楚地告诉我们,没有找到score这个attribute。..."", line 1, in AttributeError: 'Student' object has no attribute 'score' 由于'score'没有被放到...测试一下MyList是否可以调用add()方法: >>> L = MyList() >>> L.add(1) >> L [1] 而普通的list没有add()方法: >>> L2 = list() >>...的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性); 把表名保存到__table__中,这里简化为表名默认为类名。
异常处理 常见的异常处理 AssertionError;断言语句失败 assert在测试程序的时候 在代码植入检查点 >>> my_list = ["tianjun"] >>> assert len(my_list...尝试访问未知的对象属性 >>> my_list = [] >>> my_list.fisa Traceback (most recent call last): File "", line...= {"one":"1","two":"2","three":"3"} >>> dict1['one'] '1' >>> dict1['six'] Traceback (most recent call...print('没有异常') ......AttributeError 特性应用或赋值时引发(试图访问一个对象没有的属性) IOError 试图打开不存在的文件或者无全新的文件等操作时,就会引发(
AttributeError 当你访问一个对象的属性,但是这个属性并没有在这个对象定义的时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...: 'tuple' object has no attribute 'append' 这里尝试给 a_list 对象进行 append 操作但是引发了异常, 这里的错误信息说,tuple 对象没有...append 属性。...(3) AttributeError: 'NoneType' object has no attribute 'append' 是不是很眼熟啊,遇到这种情况不要慌,分析看看你的哪个对象是 None
prop = 42 ... >>> C.prop 42 你甚至可以设置和删除对象的属性: >>> C.prop = 84 >>> C.prop 84 >>> del C.prop 将字典的键值对和对象及其属性比较...但是,这并不是常用的,更提倡使用 hasattr 函数判断对象是否含有某个属性。 >>> class X: ......坦率地说,描述符是一个非常高级的话题,如果在这里试图涵盖它,没有任何用处,因为它只是和已告知的内容有所关联。...dict:以键值对为成员。...内置的 list 、tuple 和 dict 也可以用来创建这些数据结构的空实例: >>> x = list() >>> x [] >>> y = dict() >>> y {}
'z' 可以看出不能给 pt 中没有定义的属性赋值,下面去掉 __slots__ 所在行: class Point2: def __init__(self, x=0, y=0):...x.n 返回对象x的n属性值 __setattr__(self, name) x.n = v 将对象x的n属性名值设为v __getattr__ 与 __getattribute__ 的主要区别: _..._getattrobute__() 只要涉及到实例属性的访问就会调用该方法,如果属性不存在会抛出AttributeError 异常。...__getattr__() 在以下情况下调用: 属性不在实例的dict中; 属性不在其基类以及祖先类的dict 中; 触发AttributeError 异常时(不仅仅是get_attribute() 引发的异常...__dict__: raise ValueError("cannot delete a const attribute") raise AttributeError
' 由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。...但是,上面的调用方法又略显复杂,没有直接用属性这么直接简单。 有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?对于追求完美的 Python 程序员来说,这是必须要做到的!...else: print('测试失败!') 7.3 多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。...此外,如果把对象看成dict,__getitem__()的参数也可能是一个可以作 key 的 object,例如str。...的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性); 把表名保存到__table__中,这里简化为表名默认为类名。
AttributeError:当试图使用一个对象没有的属性或方法时 In [8]: dic = {'key1':'var1', ...: 'key2':'var2'} In [9...1, in dic.append('a') AttributeError: 'dict' object has no attribute 'append' 比如我们定义一个字典...dic,但是对它使用了列表的方法append,这个时候就会出现报错提示dict没有方法append。...AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError...操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index) KeyError
计算折扣后价格 :return: """ if self.promotion is None: discount = 0 # 没有任何优惠...inspect 模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。...else: mro = () results = [] processed = set() names = dir(object) # 使用dir方法拿到全部的属性...names.append(k) except AttributeError: pass for key in names: # First try to...__dict__: value = base.
对象不含指定属性时出现的异常 IOError IO流输入输出时出现的异常 KeyError 没有指定的键时出现的异常 NameError 指定变量不存在时出现的异常 SyntaxError Python...,既stu对象没有address属性,通过try-except对异常进行处理 try: stu = Student("stark", 44) print(stu) print(stu.address...判断的语句 message:断言失败时的错误提示信息 dict_01 = { 'name': 'stark', 'age': 40 } assert len(dict_01) == 4..., '断言失败, dict_01的长度不等于4' 使用 try-except 进行异常处理 try: assert len(dict_01) == 4, '断言失败, dict_01的长度不等于...2, '断言失败, dict_01的长度不等于4' except AssertionError as e: print(e)
__dict__, self._buffers, self._modules 中删除对象。...__dict__ 中没有的键所对应的值的时候,就会调用这个方法 因为 parameter, module, buffer 的键值对存在与 self._parameters, self....__dict__['_modules'] if name in modules: return modules[name] raise AttributeError...__dict__: raise AttributeError( "cannot assign parameter before Module....我们 通常通过 module.train() 和 module.eval() 来切换模型的 训练测试阶段。
.' % name) 当Python解释器载入hello模块时,就会依次执行该模块的所有语句,执行结果就是动态创建出一个Hello的class对象,测试如下: >>> from hello import...测试一下MyList是否可以调用add()方法: >>> L = MyList() >>> L.add(1) >> L [1] 而普通的list没有add()方法: >>> L2 = list() >>...__mappings__.items(): fields.append(v.name) params.append('?')...__的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性); 把表名保存到__table__中,这里简化为表名默认为类名。...因为有表名,属性到字段的映射和属性值的集合,就可以构造出INSERT语句。
Python中提供了一些魔术方法来控制对象属性的访问,赋值,删除过程。...属性赋值魔术方法 __setattr__(self, key, value) 给对象属性赋值或者添加新属性时会被调用。...属性删除魔术方法 __delattr__(self, item) 当删除一个对象属性时,该方法会被调用。...__setattr__('age', 2020 - value) else: # 必须加上这一步 否则所有的属性添加都会失败 super(...__dict__的方式来访问或修改属性,这种方式看上去可行,但是存在一个问题,因为self.__dict__本身也是对象的属性(只是这个属性比较特殊,它存放了对象的其它属性),所以每次访问self.
反射 在Python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。...函数与方法 内建函数: getattr(object,name[,degault]) 通过name返回object的属性值,当属性不存在,将使用default返回,如果没有default,则抛出AttributeError...hasattr(object,name) 判断对象是否有这个名字的属性,name必须为字符串 反射相关的魔术方法 __getattr__() 一个类的属性会按照继承关系找,如果找不到,就会执行__getattr...__()方法,如果没有这个方法,就会抛出AttributeError异常表示找不到属性。...值将作为属性查找的结果 如果抛出AttributeError异常,则会直接调用__gutattr__方法,因为表述属性没有找到。
name定义类的名称 bases定义基类,即超类 dict定义所有类属性和方法。...对象本身不受分配或删除的影响,只有箭头受其影响。但是现在没有箭头指向第一个物体,让它活着是没有意义的。因此,Python的“垃圾收集器(gc)”丢掉了它。现在我们只剩下一个object。...dir and vars: 一切都是字典 你有没有想过Python如何存储对象,它们的变量及方法?我们知道所有对象都有自己的属性和方法,但是Python究竟如何跟踪它们呢?...如果你想要一个明确的答案,知道一个对象上可以访问哪些属性,你可以使用dir >>> dir(c) ['__class__', '__delattr__', '__dict__', '__dir__',...__dict__ AttributeError: 'SlottedClass' object has no attribute '__dict__' >>> s.
而collections.defaultdict是Python字典的一个子类,继承了Python字典的所有方法和属性,因此也没有iteritems方法。...解决方案二:使用dict()函数 另外一个解决方案是使用dict()函数来转换collections.defaultdict对象为普通的字典对象,然后再使用iteritems...通过使用.items()方法,我们可以正确遍历collections.defaultdict对象,避免了AttributeError错误。...这个示例代码展示了在处理文本统计的实际场景中,如何正确地使用collections.defaultdict对象,并解决了可能出现的AttributeError: 'collections.defaultdict...作为dict的子类,collections.defaultdict继承了dict的所有方法和属性,可以像普通字典一样进行操作。
__baz = 23 让我们看看这个对象的属性使用内置的dir()函数: >>> t = Test() >>> dir(t) ['_Test__baz', '__class__', '__delattr...当在该列表中搜索_baz时,将看到没有具有该名称的变量。 那么,到底发生了什么呢? 如果仔细查看,就会看到这个对象上有一个名为_testbaz的属性。这是Python解释器应用的命名混乱。...让我们创建另一个类,扩展测试类,并尝试重写添加到构造函数中的现有属性: >>> t2 = ExtendedTest() >>> t2.foo 'overridden' >>> t2....事实证明,这个对象甚至没有一个_baz属性: >>> dir(t2) ['_ExtendedTest__baz', '_Test__baz', '__class__', '__delattr__',...append(1) >>> _.append(2) >>> _.append(3) >>> _ [1, 2, 3] 总结:Python下划线命名模式 这是我在本文中介绍的五个下划线模式在Python中的含义的简要概述
领取专属 10元无门槛券
手把手带您无忧上云