首页 文章

将字典附加到字典列表会在关键字周围添加双引号

提问于
浏览
0

我想完成:
将词典附加到现有词典列表并更新该词典中的值 .

我的问题是:当我从.yaml RobotFramework读取我的词典时,会在关键字和值周围添加双重qoutes,如下所示 .

在.yaml我有

Vlan2: { u'IP': u'1.1.1.1', 
         u'DNS': {u'SN': u's2', u'PN': u's1'}, 
         u'SRoute': [{u'IF': u'eth0', u'Mask': u'0.0.0.0'}]
       }

但是当我这样做的时候

Collections.Set To Dictionary  ${Vlan2}  IP=2.2.2.2

然后我登录到控制台

Log To Console  ${Vlan2}

我明白了

[{ "u'IP'": "u'1.1.1.1'", 
   u'IP': '2.2.2.2', 
   "u'DNS'": {"u'SN'": "u's2'", "u'PN'": "u's1'"}, 
   "u'SRoute'": [{"u'IF'": "u'eth0'", "u'Mask'": "u'0.0.0.0'"}]
 }]

我认为这种情况正在发生,因为Robot Framework在从.yaml中读取值时会添加双qoutes,因为它会显示为不同的关键字,但我无法找到解决方法 .

因为JSON信息将基于单个qoute,如同在.yaml中一样,所以一起避免双重qoutes是理想的 .

任何帮助表示赞赏!

1 回答

  • 3

    这里有很多混乱 . 这部分你的YAML:

    { u'IP': u'1.1.1.1',
    

    启动映射( { )并给出键值对 . 关键和 Value 都是标量 . 第一个标量以 u 开头,在关键指标( : )之前结束,因此标量的内容为 u'IP' . 请注意,这可能不是您想要的,因为您说:

    因为JSON信息将是单个qoute,如.yaml .

    您似乎认为您在YAML中使用单引号标量实际上,您使用的是不带引号的标量 . 在YAML中,如果标量不以引号( '" )开头,则它是一个普通标量,其中的其他引号将被解析为内容 . 你的标量开头是 u ,使它们成为不带引号的标量 . 您的YAML应该看起来像这样:

    Vlan2: { IP: 1.1.1.1, 
             DNS: {SN: s2, PN: s1}, 
             SRoute: [{IF: eth0, Mask: 0.0.0.0}]
           }
    

    另一个要记住的重要事项是,当加载到Python中时,标量的表示形式会丢失 - 如果它在YAML文件中是单引号,双引号或不引用,则没有区别 .

    现在让我们看看输出:这里再次,字符串以文本形式表示 . 这意味着它们通过某种方式引用 . 表示 "u'IP'" 完全匹配您的输入,双引号不会添加到字符串中;它们只是用来告诉你包含的字符形成一个字符串 .

    然后在输出中有这种表示: u'IP' . 这仍然是一个带引号的字符串,只是在前面有一个 u 的Python特定表示,表明这是一个unicode字符串 - 它的内容是 IP . The u-prefixed representation does not exist in YAML and this is why your input does not work correctly . 在YAML中,所有输入都是unicode,通常编码为UTF-8 . 输出中的 u'IP' 是您为代码设置的 IP 值 . 并且因为它与任何现有的dict键都不匹配(如原始键所解释的那样,内容 u'IP' ,在输出中表示为 "u'IP'" ),它已被添加为dict的附加键 .

相关问题