为何出现AttributeError: 'str'对象没有'color'属性?
问题重现
自定义代码
class city: def __init__(self,name,color=None, choise = ['r','g','b']): self.name = name self.color = color self.choise = choise def __repr__(self) -> str: return "{} {}".format(self.name,self.color) def coloring(S): if S.color == None: #this line warning AttributeError S.color = S.choise[0] def Mapcolor(S = city(name = 'a')): coloring(S)
报错栈追踪
File "d:\\Thực hành\\Thực hành 1\\exaample.py", line 29, in <module> Mapcolor("wa") File "d:\\Thực hành\\Thực hành 1\\exaample.py", line 27, in Mapcolor coloring(S) File "d:\\Thực hành\\Thực hành 1\\exaample.py", line 23, in coloring if S.color == None: AttributeError: 'str' object has no attribute 'color'
错误原因分析
核心问题是参数类型不匹配:
- 你调用
Mapcolor("wa")时,传入的是字符串对象"wa",但coloring函数设计用来处理的是city类的实例。 coloring函数里需要访问S.color和S.choise属性,这些属性是你定义的city类独有的,字符串对象根本没有这些属性,所以执行到判断S.color的代码时直接抛出错误。
补充说明:Mapcolor函数的默认参数是city(name='a')(这是符合要求的city实例),但你调用时手动传入了字符串,覆盖了默认参数,才引发了类型不匹配的问题。
如果要给名为"wa"的城市着色,正确的调用方式应该是Mapcolor(city(name="wa")),而不是传入单纯的字符串。
内容的提问来源于stack exchange,提问作者phúc trần công
相关产品推荐
相关产品推荐

