使用 yaml-cpp 获取嵌套在键层次结构中的整数时出错
error using yaml-cpp to get integer nested in key hierarchy
初始问题
我有一个 config.yaml 的结构类似于
some_other_key: 34
a:
b:
c:
d: 3
我以为我能做到
YAML::Node config = YAML::LoadFile(config_filename.c_str());
int x = config["a"]["b"]["c"]["d"].as<int>();
但我得到
terminate called after throwing an instance of
'YAML::TypedBadConversion<int>'
what(): bad conversion
如何通过我的 config.yaml 提取这样的值?如果我输错了路径中的一个键,我也会得到同样的异常,所以如果我不小心使用了一个空节点,或者如果将有效节点的值转换为 int
第一次回复后跟进
感谢您的回复!也许 config.yaml 中的内容有问题?这里有一个小例子可以重现,
yaml 文件:config2.yaml
daq_writer:
num: 3
num_per_host: 3
hosts:
- local
datasets:
small:
chunksize: 600
Python能读懂:
顺便说一下,我在 rhel7 上 linux,但是从 python 3.6 环境来看,一切看起来都不错:
$ python -c "import yaml; print(yaml.load(open('config2.yaml','r')))"
{'daq_writer': {'num_per_host': 3, 'num': 3, 'datasets': {'small': {'chunksize': 600}}, 'hosts': ['local']}}
C++ yaml-cpp 代码
文件yamlex.cpp:
#include <string>
#include <iostream>
#include "yaml-cpp/yaml.h"
int main() {
YAML::Node config = YAML::LoadFile("config2.yaml");
int small_chunksize = config["daq_writer"]["datasets"]["smal"]["chunksize"].as<int>();
}
当我编译并运行这个时,我得到:
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ c++ --std=c++11 -Iinclude -Llib -lyaml-cpp yamlex.cpp
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ LD_LIBRARY_PATH=lib ./a.out
terminate called after throwing an instance of 'YAML::TypedBadConversion<int>'
what(): bad conversion
Aborted (core dumped)
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
我已经能够读取顶级密钥,例如我上面引用的 some_other_key
,但是当我使用这个嵌套密钥时出现错误。很高兴知道语法有效!
您的键有错别字:您写的是 "smal",而不是 "small"。
初始问题
我有一个 config.yaml 的结构类似于
some_other_key: 34
a:
b:
c:
d: 3
我以为我能做到
YAML::Node config = YAML::LoadFile(config_filename.c_str());
int x = config["a"]["b"]["c"]["d"].as<int>();
但我得到
terminate called after throwing an instance of
'YAML::TypedBadConversion<int>'
what(): bad conversion
如何通过我的 config.yaml 提取这样的值?如果我输错了路径中的一个键,我也会得到同样的异常,所以如果我不小心使用了一个空节点,或者如果将有效节点的值转换为 int
第一次回复后跟进
感谢您的回复!也许 config.yaml 中的内容有问题?这里有一个小例子可以重现,
yaml 文件:config2.yaml
daq_writer:
num: 3
num_per_host: 3
hosts:
- local
datasets:
small:
chunksize: 600
Python能读懂:
顺便说一下,我在 rhel7 上 linux,但是从 python 3.6 环境来看,一切看起来都不错:
$ python -c "import yaml; print(yaml.load(open('config2.yaml','r')))"
{'daq_writer': {'num_per_host': 3, 'num': 3, 'datasets': {'small': {'chunksize': 600}}, 'hosts': ['local']}}
C++ yaml-cpp 代码
文件yamlex.cpp:
#include <string>
#include <iostream>
#include "yaml-cpp/yaml.h"
int main() {
YAML::Node config = YAML::LoadFile("config2.yaml");
int small_chunksize = config["daq_writer"]["datasets"]["smal"]["chunksize"].as<int>();
}
当我编译并运行这个时,我得到:
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ c++ --std=c++11 -Iinclude -Llib -lyaml-cpp yamlex.cpp
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ LD_LIBRARY_PATH=lib ./a.out
terminate called after throwing an instance of 'YAML::TypedBadConversion<int>'
what(): bad conversion
Aborted (core dumped)
(lc2) psanagpu101: ~/rel/lc2-hdf5-110 $ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
我已经能够读取顶级密钥,例如我上面引用的 some_other_key
,但是当我使用这个嵌套密钥时出现错误。很高兴知道语法有效!
您的键有错别字:您写的是 "smal",而不是 "small"。