使用Python和PyYAML获取多行YAML中port值报错求助
解决PyYAML读取多行字符串嵌套YAML时的AttributeError问题
问题原因
你的YAML配置中,values字段使用了|-多行字符串标记,这会让PyYAML将该字段的值解析为纯字符串,而非嵌套的字典结构。所以当你尝试对data.get('values', {})调用.get()方法时,会触发AttributeError: 'str' object has no attribute 'get'——字符串类型本身没有get()方法。
解决方案
需要对values对应的字符串内容二次解析,将其转换为字典后再读取port值。修改后的脚本如下:
import yaml with open('service.yaml') as f: data = yaml.safe_load(f) # 先把values对应的多行字符串解析为YAML字典 values_dict = yaml.safe_load(data.get('values', '')) # 从解析后的字典中获取port值 port = values_dict.get('services', {}).get('port', None) print(port)
说明
data.get('values', '')确保当values字段不存在时,传入空字符串给yaml.safe_load(),避免因None导致解析报错。- 二次解析后,
values_dict会转为嵌套字典结构,此时可正常使用.get()方法读取services.port的值。
内容的提问来源于stack exchange,提问作者RodrighoMR
相关产品推荐
相关产品推荐

