Python person类触发can only concatenate str (not "int") to str报错解析
错误根源定位
- 类构造方法
__init__存在属性赋值逻辑笔误:连续两次给self.name属性赋值,第一次存入字符串类型的姓名入参,第二次直接把整数类型的age入参覆盖到self.name上,全程没有给self.age绑定值。这一问题会触发两层连锁故障:self.name最终存储的是整数类型的年龄值,后续执行字符串拼接时,Python不允许字符串和整数类型直接用+运算符连接,直接触发can only concatenate str (not "int") to str报错- 实例不存在
self.age属性,就算绕过第一行打印的报错,后续打印年龄的语句还会触发属性未定义的AttributeError
- 打印逻辑本身存在类型不匹配缺陷:就算修正了属性赋值错误,年龄是整数类型,直接和字符串常量做
+拼接,依然会触发相同的类型报错。
修正方案
- 修正构造方法的赋值笔误:将错误的
self.name = age调整为self.age = age,保证self.name存储传入的姓名字符串,self.age存储传入的整数年龄 - 调整打印语句的拼接逻辑:将整数类型的年龄转为字符串类型后再和文本拼接,或使用Python原生的格式化语法完成混合类型拼接,从根源避免类型不匹配问题
修正后可直接运行的代码
class person: def __init__(self, name, age): self.name = name self.age = age def myfunc(self): print(" Hello my name is " + self.name) print(" my age is " + str(self.age)) # 等效的更简洁写法:使用f-string自动处理类型转换 # print(f" Hello my name is {self.name}") # print(f" my age is {self.age}") p1 = person("Siddu", 24) p1.myfunc()
内容的提问来源于stack exchange,提问作者siddarthareddy chitiki
相关产品推荐
相关产品推荐

