Python3中'dict_keys'不可下标及list()参数错误求助
错误解决
第一个错误原因及修正
原代码:
self.instance_id = get_instance_metadata(data='meta-data/instance-id').keys()[0]
报错TypeError: 'dict_keys' object is not subscriptable,是因为Python3里dict.keys()返回的是dict_keys视图对象,它不是列表,不支持下标访问(比如[0])。
你的修改错误原因
你修改后的代码:
self.instance_id = get_instance_metadata(list(data='meta-data/instance-id').keys())[0]
报错TypeError: list() takes no keyword arguments,是因为你错误地把data='meta-data/instance-id'作为关键字参数传给了list(),但list()不接受关键字参数,且逻辑顺序错误——应该先调用get_instance_metadata拿到字典,再处理它的键,而非先把参数转成列表。
正确的两种修改方式
方式1:将dict_keys转成列表后取下标
先调用get_instance_metadata获取字典,再把键视图转成列表,最后取第一个元素:
self.instance_id = list(get_instance_metadata(data='meta-data/instance-id').keys())[0]
方式2:用迭代器取第一个键(更高效)
如果只需要第一个键,无需把所有键转成列表,用iter()把键视图转成迭代器,再用next()取第一个元素:
self.instance_id = next(iter(get_instance_metadata(data='meta-data/instance-id').keys()))
内容的提问来源于stack exchange,提问作者netrangermike
相关产品推荐
相关产品推荐

