如何在列表推导式中访问可能为None的成员属性避免AttributeError报错
解决方案
你遇到的报错是因为当Item实例的y成员为None时,直接访问y.z会触发AttributeError,需要在访问z属性前增加判空逻辑,以下是几种常用的可直接运行的实现方式:
- 方案1:条件表达式写法(全Python版本兼容,可读性最高)
直接在列表推导式中使用三元运算符做判空处理:xs = [(item.x, item.y.z if item.y is not None else None) for item in items] - 方案2:getattr简化写法(全Python版本兼容,代码更简洁)
利用Python内置的getattr方法的默认值特性实现需求,即使第一个参数为None也会直接返回默认值不会报错:xs = [(item.x, getattr(item.y, 'z', None)) for item in items] - 方案3:可选链写法(仅Python 3.10及以上版本支持,代码最精简)
使用Python 3.10新增的PEP 505可选链语法:xs = [(item.x, item.y?.z) for item in items]
内容的提问来源于stack exchange,提问作者Anonymous Entity
相关产品推荐
相关产品推荐

