Hydra: [Bug] Optional[List] params defaulted to None don't work

Created on 3 Nov 2020  Â·  4Comments  Â·  Source: facebookresearch/hydra

see title.
Version: 1.0.3
example:

hydra_ex.py

import hydra

from dataclasses import dataclass, field
from typing import Optional, List
from hydra.core.config_store import ConfigStore

@dataclass
class Config:
    my_field: Optional[List[int]] = None
    other_field: int = 5

cs = ConfigStore.instance()
cs.store(name="hydra_ex", node=Config)

@hydra.main(config_path=".", config_name="hydra_ex")
def main(cfg):
    print(cfg)

main()

hydea_ex.yaml:

# @package _group_
other_field: 42

output:

Cannot iterate a ListConfig object representing None
    full_key: my_field
    reference_type=Optional[List[int]]
    object_type=list

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
bug

All 4 comments

Thanks. can you update the issue with a the complete stack trace?

$ HYDRA_FULL_ERROR=1 python hydra_ex.py

Also, can you mention the Hydra version in the issue. is it 1.0.3?

OC_CAUSE=1 HYDRA_FULL_ERROR=1 python hydra_ex.py                                                    14:58:42
Traceback (most recent call last):
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/listconfig.py", line 444, in _iter_ex
    raise TypeError("Cannot iterate a ListConfig object representing None")
TypeError: Cannot iterate a ListConfig object representing None

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/config_loader_impl.py", line 156, in load_configuration
    from_shell=from_shell,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/config_loader_impl.py", line 236, in _load_configuration
    _recursive_unset_readonly(hydra_cfg)
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/config_loader_impl.py", line 911, in _recursive_unset_readonly
    _recursive_unset_readonly(v)
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/config_loader_impl.py", line 915, in _recursive_unset_readonly
    for item in cfg:
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/listconfig.py", line 439, in __iter__
    return self._iter_ex(resolve=True)
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/listconfig.py", line 468, in _iter_ex
    self._format_and_raise(key=None, value=None, cause=e)
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/base.py", line 101, in _format_and_raise
    type_override=type_override,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/_utils.py", line 675, in format_and_raise
    _raise(ex, cause)
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/omegaconf/_utils.py", line 591, in _raise
    raise ex  # set end OC_CAUSE=1 for full backtrace
omegaconf.errors.ConfigTypeError: Cannot iterate a ListConfig object representing None
    full_key: my_field
    reference_type=Optional[List[int]]
    object_type=list

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "hydra_ex.py", line 19, in <module>
    main()
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/main.py", line 37, in decorated_main
    strict=strict,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/utils.py", line 347, in _run_hydra
    lambda: hydra.run(
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/utils.py", line 201, in run_and_report
    raise ex
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/utils.py", line 198, in run_and_report
    return func()
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/utils.py", line 350, in <lambda>
    overrides=args.overrides,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/hydra.py", line 104, in run
    run_mode=RunMode.RUN,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/hydra.py", line 512, in compose_config
    from_shell=from_shell,
  File "/private/home/abaevski/.conda/envs/fairseq-fp16-20200821/lib/python3.6/site-packages/hydra/_internal/config_loader_impl.py", line 159, in load_configuration
    raise ConfigCompositionException() from e
hydra.errors.ConfigCompositionException

There are two bugs here, one in Hydra 1.0 (not in master) and one in OmegaConf (both 2.0 and master):

OmegaConf issue.

fix is merged to both branches. closing now.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

vict0rsch picture vict0rsch  Â·  4Comments

SunQpark picture SunQpark  Â·  4Comments

lkhphuc picture lkhphuc  Â·  3Comments

emilemathieu picture emilemathieu  Â·  4Comments

omry picture omry  Â·  4Comments