rbgirshick / yacs

YACS -- Yet Another Configuration System
Apache License 2.0
1.27k stars 89 forks source link

`dump()` will fail if some key is an integer #54

Open Zeltserj opened 2 years ago

Zeltserj commented 2 years ago

Running:

from yacs.config import CfgNode as CN
cfg = CN()
cfg["MYKEY"] = CN()
cfg.MYKEY[1] = "a_sub_value"
print(cfg.dump())

Gives:

Traceback (most recent call last):
  File "/Users/zeltserj/yacs/example/main.py", line 5, in <module>
    print(cfg.dump())
  File "/Users/zeltserj/yacs/yacs/config.py", line 206, in dump
    self_as_dict = convert_to_dict(self, [])
  File "/Users/zeltserj/yacs/yacs/config.py", line 203, in convert_to_dict
    cfg_dict[k] = convert_to_dict(v, key_list + [k])
  File "/Users/zeltserj/yacs/yacs/config.py", line 203, in convert_to_dict
    cfg_dict[k] = convert_to_dict(v, key_list + [k])
  File "/Users/zeltserj/yacs/yacs/config.py", line 196, in convert_to_dict
    ".".join(key_list), type(cfg_node), _VALID_TYPES
TypeError: sequence item 1: expected str instance, int found

running with "1" instead, works fine.

luowyang commented 2 years ago

It seems that ".".join(key_list) does not accept integer as list element. The same is observed when the config is read from file which contains integer as key. Maybe it should be made clear that pure numbers should not be used as keys, or to parse integer keys as strings.