You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本跨方法传递数据后YAML键值匹配错误,如何保留键值顺序?

问题描述
  • 场景:Python的AppTool类中,extract_information静态方法可正确提取网络测试数据,提取结果如下:

Extracted Information - local_ip 10.122.1.159
Extracted Information - host_ip 10.122.1.150
Extracted Information - interval 0.00-5.02
Extracted Information - transfer 10.8 GBytes
Extracted Information - bandwidth 18.4 Gbits/sec

  • 异常:调用create_config_map_manifest静态方法将数据转为YAML格式ConfigMap时,键值完全错位,且bandwidth值为null,输出如下:

ConfigMap Data: bandwidth: null
host_IP: 0.00-5.02
interval: 10.8 GBytes
local_IP: 10.122.1.150
transfer: 18.4 Gbits/sec

  • 需求:修复键值匹配错误,同时保留YAML键值的原有顺序。
原因分析
  1. 键名格式不匹配:提取阶段使用小写下划线命名(local_ip、host_ip),但ConfigMap输出使用大写驼峰格式(local_IP、host_IP),导致属性映射失败。
  2. 赋值顺序错位:create_config_map_manifest方法构建键值对时,未按提取数据的顺序一一对应,出现值的错位赋值。
  3. bandwidth值丢失:因键名不匹配或赋值遗漏,导致无法读取到bandwidth的正确值。
解决方案

1. 统一键名格式

确保提取后的实例属性键名与ConfigMap输出的键名完全一致,示例:

# 提取时将数据存入格式匹配的实例属性
self.local_ip = extracted_local_ip  # 若输出需要local_IP则改为self.local_IP
self.host_ip = extracted_host_ip
self.interval = extracted_interval
self.transfer = extracted_transfer
self.bandwidth = extracted_bandwidth

2. 按顺序构建有序结构

为保留YAML键值顺序,使用collections.OrderedDict(Python3.7+普通字典也保留插入顺序,明确使用更稳妥),严格按需求顺序添加键值对:

from collections import OrderedDict
import yaml

@staticmethod
def create_config_map_manifest(app_tool_instance):
    # 按指定顺序构建有序字典,键名需与实例属性一致
    config_data = OrderedDict([
        ('local_ip', app_tool_instance.local_ip),
        ('host_ip', app_tool_instance.host_ip),
        ('interval', app_tool_instance.interval),
        ('transfer', app_tool_instance.transfer),
        ('bandwidth', app_tool_instance.bandwidth)
    ])
    # 若输出需要大写驼峰键名,修改OrderedDict中的键即可,比如('local_IP', ...)
    return yaml.dump(config_data, default_flow_style=False)

3. 校验赋值逻辑

检查create_config_map_manifest方法中每个键对应的实例属性,确保无错位赋值情况,比如避免将interval的值赋给host_ip。

4. 验证修复结果

修复后重新运行,确认输出的ConfigMap数据符合预期:

ConfigMap Data: local_ip: 10.122.1.159
host_ip: 10.122.1.150
interval: 0.00-5.02
transfer: 10.8 GBytes
bandwidth: 18.4 Gbits/sec

内容的提问来源于stack exchange,提问作者DevOps__1903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:26:27