我正在使用this QA中的方法清理一些ROS机器人代码。这与ROS无关。
这是原始代码:
data = []
data.append(sensor[thermo].data.thermo)
data.append(sensor[imu].data.imu.x)
data.append(sensor[imu].data.imu.rotation.x)
现在,我有一个包含所有主题的元组列表,因此我可以循环浏览:
topics = [('thermo', 'thermo'),
('imu', 'imu.x')
('imu', 'imu.rotation.x')]
和:
for sensor, topic in topics:
data.append(getattr[sensor].data, topic)
这适用于thermo
,但不适用于imu
,并且出现以下错误:
AttributeError:“ imu”对象没有属性“ x”
如何解决getattr
语句以达到此处的目标?
答案 0 :(得分:1)
可以使用reduce
中的功能functools
:
reduce(getattr, "att1.att2.att3".split('.'), sensor[imu])