Python中使用pandas读取Excel列表数据实例化自定义类失败如何解决?
问题原因及解决方法
核心问题
你的代码本身没有语法错误,实例已经正常创建并存入了potion_instances列表,你误以为「没有效果」的核心原因是自定义类没有定义字符串表示方法,直接打印实例/实例列表时只会输出内存地址,看不到具体属性值,容易被误判为创建失败。
另外还有一个小的类型差异点:pandas读取Excel时serial_number字段会被识别为整数类型,你手动测试时传入的是字符串类型,如果你后续类逻辑有针对字符串的校验/处理,可能会出现隐性问题。
解决步骤
- 给自定义Asset类添加
__repr__方法,用于输出实例的具体属性,方便调试查看:
class Asset(): """ class to create assets """ def __init__(self, hostname, serial_number, city): self.hostname = hostname self.serial_number = serial_number self.city = city # 新增字符串表示方法 def __repr__(self): return f"Asset(hostname='{self.hostname}', serial_number={self.serial_number}, city='{self.city}')"
添加后直接打印potion_instances列表就能看到每个实例的具体属性值。
- (可选)如果你需要
serial_number统一为字符串类型,可以在读取后转换字段类型,和手动传参的格式保持一致:
df = pd.read_excel('some_assets.xlsx', sheet_name='Tabelle1') df1 = df[['hostname', 'serial_number', 'city']] # 转换serial_number为字符串类型 df1['serial_number'] = df1['serial_number'].astype(str) potions = df1.values.tolist()
- 验证创建结果:你可以通过以下代码确认实例是否正常创建:
# 输出列表长度,应为6,和Excel行数一致 print(len(potion_instances)) # 输出第一个实例的hostname属性,应为host1 print(potion_instances[0].hostname) # 输出第一个实例的serial_number属性,应为2312312 print(potion_instances[0].serial_number)
内容的提问来源于stack exchange,提问作者Mr. Miyagi
相关产品推荐
相关产品推荐

