我想完成:
将词典附加到现有词典列表并更新该词典中的值 .
我的问题是:当我从.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 回答
这里有很多混乱 . 这部分你的YAML:
启动映射(
{
)并给出键值对 . 关键和 Value 都是标量 . 第一个标量以u
开头,在关键指标(:
)之前结束,因此标量的内容为u'IP'
. 请注意,这可能不是您想要的,因为您说:您似乎认为您在YAML中使用单引号标量实际上,您使用的是不带引号的标量 . 在YAML中,如果标量不以引号(
'
或"
)开头,则它是一个普通标量,其中的其他引号将被解析为内容 . 你的标量开头是u
,使它们成为不带引号的标量 . 您的YAML应该看起来像这样:另一个要记住的重要事项是,当加载到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的附加键 .