如何不修改Python Dataclass定义,为缺失的字段赋值None?
问题解决方案
你遇到的报错是因为直接访问row.name时,如果row对象本身不存在name属性,就会直接抛出AttributeError,还没来得及执行后续的判断逻辑。
解决方法
使用Python内置的getattr()函数即可解决,该函数支持在目标属性不存在时返回你指定的默认值,不会抛出属性不存在的异常。
你只需要将实例化Person时的name赋值逻辑改成如下写法即可:
- 如果希望属性不存在时返回
None:name=getattr(row, 'name', None) - 如果希望属性不存在时返回空字符串:
name=getattr(row, 'name', '')
完整代码示例
from dataclasses import dataclass @dataclass class Person: name: str age: int married: bool # 遍历数据源赋值 for row in something: ob = Person( name=getattr(row, 'name', None), age=row.age, married=row.married, )
扩展说明
如果后续你遇到其他字段也可能不存在的情况,都可以用getattr()函数处理,只需要把第二个参数改成对应字段名,第三个参数改成你需要的默认值即可,完全不需要修改Person dataclass的原有定义,符合你的需求。
内容的提问来源于stack exchange,提问作者PercySherlock
相关产品推荐
相关产品推荐

