diff --git a/omegaconf/dictconfig.py b/omegaconf/dictconfig.py
index 640414a..5499a5b 100644
--- a/omegaconf/dictconfig.py
+++ b/omegaconf/dictconfig.py
@@ -257,9 +257,10 @@ class DictConfig(BaseContainer, MutableMapping[str, Any]):
                 ret = EnumNode.validate_and_convert_to_enum(key_type, key)
                 assert ret is not None
                 return ret
-            except ValidationError as e:
+            except ValidationError:
+                valid = ", ".join([x for x in key_type.__members__.keys()])
                 raise KeyValidationError(
-                    f"Key '$KEY' is incompatible with ({key_type.__name__}) : {e}"
+                    f"Key '$KEY' is incompatible with the enum type '{key_type.__name__}', valid: [{valid}]"
                 )
         else:
             assert False
diff --git a/omegaconf/nodes.py b/omegaconf/nodes.py
index dc19d95..21475da 100644
--- a/omegaconf/nodes.py
+++ b/omegaconf/nodes.py
@@ -379,9 +379,9 @@ class EnumNode(ValueNode):  # lgtm [py/missing-equals] : Intentional.
             assert False
 
         except (ValueError, KeyError) as e:
-            valid = "\n".join([f"\t{x}" for x in enum_type.__members__.keys()])
+            valid = ", ".join([x for x in enum_type.__members__.keys()])
             raise ValidationError(
-                f"Invalid value '$VALUE', expected one of:\n{valid}"
+                f"Invalid value '$VALUE', expected one of [{valid}]"
             ).with_traceback(sys.exc_info()[2]) from e
 
     def __deepcopy__(self, memo: Dict[int, Any] = {}) -> "EnumNode":

Invalid error message assigning with an invalid inner Dict key.
```python
from dataclasses import dataclass, field
from typing import List, Any, Dict
from omegaconf import OmegaConf
from enum import Enum

class Color(Enum):
    RED = 1
    BLUE = 2
    GREEN = 3

@dataclass
class Dicts:
    d1: Dict[str, Any] = field(default_factory=lambda: {})
    d2: Dict[Color, str] = field(default_factory=lambda: {})

dicts = OmegaConf.structured(Dicts)
dicts.d2["10"] = "foo"
```
Error seems wrong
```
omegaconf.errors.KeyValidationError: Key '10' is incompatible with (Color) : Invalid value 'foo', expected one of:
	RED
	BLUE
	GREEN
	full_key: d2.10
	reference_type=Dict[Color, str]
	object_type=dict

```
diff --git a/tests/__init__.py b/tests/__init__.py
index 70193e9..e71496e 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -98,3 +98,9 @@ class MissingList:
 @dataclass
 class MissingDict:
     dict: Dict[str, str] = MISSING
+
+
+@dataclass
+class DictEnum:
+    color_key: Dict[Color, str] = field(default_factory=lambda: {})
+    color_val: Dict[str, Color] = field(default_factory=lambda: {})
diff --git a/tests/test_errors.py b/tests/test_errors.py
index 850638b..7227794 100644
--- a/tests/test_errors.py
+++ b/tests/test_errors.py
@@ -270,6 +270,28 @@ params = [
         ),
         id="dict,struct:setitem_on_none_existing_key",
     ),
+    pytest.param(
+        Expected(
+            create=lambda: DictConfig(key_type=Color, element_type=str, content={}),
+            op=lambda cfg: cfg.__setitem__("foo", "bar"),
+            exception_type=KeyValidationError,
+            msg="Key 'foo' is incompatible with the enum type 'Color', valid: [RED, GREEN, BLUE]",
+            full_key="foo",
+            key="foo",
+        ),
+        id="DictConfig[Color,str]:setitem_bad_key",
+    ),
+    pytest.param(
+        Expected(
+            create=lambda: DictConfig(key_type=str, element_type=Color, content={}),
+            op=lambda cfg: cfg.__setitem__("foo", "bar"),
+            exception_type=ValidationError,
+            msg="Invalid value 'bar', expected one of [RED, GREEN, BLUE]",
+            full_key="foo",
+            key="foo",
+        ),
+        id="DictConfig[str,Color]:setitem_bad_value",
+    ),
     # getitem
     pytest.param(
         Expected(
@@ -286,9 +308,9 @@ params = [
             create=lambda: DictConfig(key_type=Color, element_type=str, content={}),
             op=lambda cfg: cfg.__getitem__("foo"),
             exception_type=KeyValidationError,
-            msg="Key 'foo' is incompatible with (Color)",
+            msg="Key 'foo' is incompatible with the enum type 'Color', valid: [RED, GREEN, BLUE]",
             key="foo",
-            num_lines=7,
+            num_lines=4,
         ),
         id="DictConfig[Color,str]:getitem_str_key",
     ),

pip install -e .[dev]
parse_log_pytest
pytest
pytest pytest-mock
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
-e git+https://github.com/omry/omegaconf.git@cac0e1f9fe3f489711cc61808716dfcbc2c2a670#egg=omegaconf
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
pytest-mock==3.11.1
PyYAML==6.0.1
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: omegaconf
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - omegaconf==2.0.0rc29
      - pytest-mock==3.11.1
      - pyyaml==6.0.1
prefix: /opt/conda/envs/omegaconf

tests/test_errors.py::test_errors[DictConfig[Color,str]:setitem_bad_key] tests/test_errors.py::test_errors[DictConfig[str,Color]:setitem_bad_value] tests/test_errors.py::test_errors[DictConfig[Color,str]:getitem_str_key]
tests/test_base_config.py::test_set_value[input_0-foo-10-expected0] tests/test_base_config.py::test_set_value[input_1-foo-value1-expected1] tests/test_base_config.py::test_set_value[input_2-foo-value2-expected2] tests/test_base_config.py::test_set_value[input_3-foo-value3-expected3] tests/test_base_config.py::test_set_value[input_4-0-10-expected4] tests/test_base_config.py::test_set_value[input_5-1-10-expected5] tests/test_base_config.py::test_set_value[input_6-1-value6-expected6] tests/test_base_config.py::test_set_value[input_7-1-value7-expected7] tests/test_base_config.py::test_set_value[input_8-1-value8-expected8] tests/test_base_config.py::test_set_value_validation_fail[input_0-foo-str] tests/test_base_config.py::test_set_value_validation_fail[input_1-1-str] tests/test_base_config.py::test_replace_value_node_type_with_another[input_0-foo-value0] tests/test_base_config.py::test_replace_value_node_type_with_another[input_1-1-value1] tests/test_base_config.py::test_to_container_returns_primitives[list] tests/test_base_config.py::test_to_container_returns_primitives[dict_in_list] tests/test_base_config.py::test_to_container_returns_primitives[list_in_list] tests/test_base_config.py::test_to_container_returns_primitives[dict_in_dict] tests/test_base_config.py::test_to_container_returns_primitives[list_in_dict] tests/test_base_config.py::test_to_container_returns_primitives[none_dictconfig] tests/test_base_config.py::test_to_container_returns_primitives[none_listconfig] tests/test_base_config.py::test_to_container_returns_primitives[missing_dictconfig] tests/test_base_config.py::test_to_container_returns_primitives[missing_listconfig] tests/test_base_config.py::test_to_container[empty_list] tests/test_base_config.py::test_to_container[list] tests/test_base_config.py::test_to_container[list_with_none] tests/test_base_config.py::test_to_container[list_with_inter] tests/test_base_config.py::test_to_container[empty_dict] tests/test_base_config.py::test_to_container[dict] tests/test_base_config.py::test_to_container[dict_with_inter] tests/test_base_config.py::test_to_container[dict_with_none] tests/test_base_config.py::test_to_container[dict_missing_value] tests/test_base_config.py::test_to_container[dict_none_value] tests/test_base_config.py::test_to_container[dict_none_dictconfig] tests/test_base_config.py::test_to_container[dict_missing_dictconfig] tests/test_base_config.py::test_to_container[dict_inter_dictconfig] tests/test_base_config.py::test_to_container[dict_missing_listconfig] tests/test_base_config.py::test_to_container[dict_none_listconfig] tests/test_base_config.py::test_to_container[dict_inter_listconfig] tests/test_base_config.py::test_to_container_missing_inter_no_resolve[DictConfig] tests/test_base_config.py::test_to_container_missing_inter_no_resolve[nested_DictConfig] tests/test_base_config.py::test_empty[input_0-True] tests/test_base_config.py::test_empty[input_1-True] tests/test_base_config.py::test_empty[input_2-False] tests/test_base_config.py::test_empty[input_3-False] tests/test_base_config.py::test_str[list0-str] tests/test_base_config.py::test_str[list0-repr] tests/test_base_config.py::test_str[dict0-str] tests/test_base_config.py::test_str[dict0-repr] tests/test_base_config.py::test_str[list1-str] tests/test_base_config.py::test_str[list1-repr] tests/test_base_config.py::test_str[dict_in_list-str] tests/test_base_config.py::test_str[dict_in_list-repr] tests/test_base_config.py::test_str[list_in_list-str] tests/test_base_config.py::test_str[list_in_list-repr] tests/test_base_config.py::test_str[dict1-str] tests/test_base_config.py::test_str[dict1-repr] tests/test_base_config.py::test_str[list_in_dict-str] tests/test_base_config.py::test_str[list_in_dict-repr] tests/test_base_config.py::test_str[structured_with_missing-str] tests/test_base_config.py::test_str[structured_with_missing-repr] tests/test_base_config.py::test_flag_dict[readonly] tests/test_base_config.py::test_flag_dict[struct] tests/test_base_config.py::test_freeze_nested_dict[readonly] tests/test_base_config.py::test_freeze_nested_dict[struct] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy[StructuredWithMissing] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[StructuredWithMissing] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[StructuredWithMissing] tests/test_base_config.py::test_deepcopy_after_del tests/test_base_config.py::test_deepcopy_after_pop tests/test_base_config.py::test_deepcopy_with_interpolation tests/test_base_config.py::test_deepcopy_and_merge_and_flags tests/test_base_config.py::test_deepcopy_preserves_container_type[cfg0] tests/test_base_config.py::test_deepcopy_preserves_container_type[cfg1] tests/test_base_config.py::test_flag_override[struct_setiitem] tests/test_base_config.py::test_flag_override[struct_setattr] tests/test_base_config.py::test_flag_override[readonly] tests/test_base_config.py::test_read_write_override[src0-<lambda>-expectation0] tests/test_base_config.py::test_read_write_override[src1-<lambda>-expectation1] tests/test_base_config.py::test_tokenize_with_escapes[dog,cat-tokenized0] tests/test_base_config.py::test_tokenize_with_escapes[dog\\,cat\\ tests/test_base_config.py::test_tokenize_with_escapes[dog,\\ tests/test_base_config.py::test_tokenize_with_escapes[\\ tests/test_base_config.py::test_tokenize_with_escapes[dog, tests/test_base_config.py::test_tokenize_with_escapes[whitespace\\ tests/test_base_config.py::test_tokenize_with_escapes[None-tokenized8] tests/test_base_config.py::test_tokenize_with_escapes[-tokenized9] tests/test_base_config.py::test_tokenize_with_escapes[no tests/test_base_config.py::test_struct_override[src0-<lambda>-expectation0] tests/test_base_config.py::test_open_dict_restore[struct-open_dict] tests/test_base_config.py::test_open_dict_restore[readonly-read_write] tests/test_base_config.py::TestCopy::test_copy[src0-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src0-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src1-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src1-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src2-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src2-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src3-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src3-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src4-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src4-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src5-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src5-<lambda>1] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src0-2-0-<lambda>0] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src0-2-0-<lambda>1] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src1-b-a-<lambda>0] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src1-b-a-<lambda>1] tests/test_base_config.py::TestCopy::test_list_copy_is_shallow[<lambda>0] tests/test_base_config.py::TestCopy::test_list_copy_is_shallow[<lambda>1] tests/test_base_config.py::test_not_implemented tests/test_base_config.py::test_resolve_str_interpolation[a-a] tests/test_base_config.py::test_resolve_str_interpolation[${foo}-10] tests/test_base_config.py::test_resolve_str_interpolation[${bar}-10] tests/test_base_config.py::test_resolve_str_interpolation[foo_${foo}-foo_10] tests/test_base_config.py::test_resolve_str_interpolation[foo_${bar}-foo_10] tests/test_base_config.py::test_omegaconf_create tests/test_base_config.py::test_assign[parent0-0-value0-expected0] tests/test_base_config.py::test_assign[parent1-0-value1-expected1] tests/test_base_config.py::test_assign[parent2-0-value2-expected2] tests/test_base_config.py::test_assign[parent3-foo-value3-expected3] tests/test_base_config.py::test_assign[parent4-foo-value4-expected4] tests/test_base_config.py::test_assign[parent5-foo-value5-expected5] tests/test_base_config.py::test_get_node[cfg0-foo-bar] tests/test_base_config.py::test_get_node[cfg1-foo-None] tests/test_base_config.py::test_get_node[cfg2-foo-???] tests/test_base_config.py::test_get_node[cfg3-1-20] tests/test_base_config.py::test_get_node[cfg4-1-None] tests/test_base_config.py::test_get_node[cfg5-1-???] tests/test_errors.py::test_errors[structured:update_with_invalid_value] tests/test_errors.py::test_errors[structured:update:none_to_non_optional] tests/test_errors.py::test_errors[dict:update:object_of_illegal_type] tests/test_errors.py::test_errors[dict,readonly:pop] tests/test_errors.py::test_errors[dict:pop_invalid] tests/test_errors.py::test_errors[dict:pop_invalid_nested] tests/test_errors.py::test_errors[structured:access_invalid_attribute] tests/test_errors.py::test_errors[dict,struct:access_invalid_attribute] tests/test_errors.py::test_errors[dict,accessing_missing_interpolation] tests/test_errors.py::test_errors[dict,accessing_missing_str_interpolation] tests/test_errors.py::test_errors[dict,struct:set_invalid_attribute] tests/test_errors.py::test_errors[structured:setattr,invalid_type_assigned_to_structured] tests/test_errors.py::test_errors[dict,readonly:set_attribute] tests/test_errors.py::test_errors[dict,not_optional:set_none] tests/test_errors.py::test_errors[structured:setattr,invalid_type_assigned_to_field] tests/test_errors.py::test_errors[dict,struct:setitem_on_none_existing_key] tests/test_errors.py::test_errors[dict,struct:getitem_key_not_in_struct] tests/test_errors.py::test_errors[DictConfig[str,str]:getitem_color_key] tests/test_errors.py::test_errors[dict,readonly:merge_with] tests/test_errors.py::test_errors[structured:merge,invalid_field_type] tests/test_errors.py::test_errors[structured:merge,adding_an_invalid_key] tests/test_errors.py::test_errors[structured:merge_invalid_dataclass] tests/test_errors.py::test_errors[dict:get_illegal_type] tests/test_errors.py::test_errors[dict:get_object_of_illegal_type] tests/test_errors.py::test_errors[dict_create_none_optional_with_none] tests/test_errors.py::test_errors[dict_create_from_illegal_type] tests/test_errors.py::test_errors[structured:create_from_unsupported_object] tests/test_errors.py::test_errors[structured:create_with_union_error] tests/test_errors.py::test_errors[dict:set_value:reftype_mismatch] tests/test_errors.py::test_errors[DictConfig[str,int]:assigned_str_value] tests/test_errors.py::test_errors[dict,readonly:del] tests/test_errors.py::test_errors[dict,struct:del] tests/test_errors.py::test_errors[dict,structured:del] tests/test_errors.py::test_errors[list:setattr0] tests/test_errors.py::test_errors[list:setattr1] tests/test_errors.py::test_errors[list:get_nox_ex:invalid_index_type] tests/test_errors.py::test_errors[list:get_node_ex:index_out_of_range] tests/test_errors.py::test_errors[list:get_node_none] tests/test_errors.py::test_errors[list:get_node_missing] tests/test_errors.py::test_errors[list:create_not_optional_with_none] tests/test_errors.py::test_errors[list:append_value_of_illegal_type] tests/test_errors.py::test_errors[list:readonly:pop] tests/test_errors.py::test_errors[list:pop_invalid_key] tests/test_errors.py::test_errors[dict,struct:pop] tests/test_errors.py::test_errors[dict,structured:pop] tests/test_errors.py::test_errors[list:pop_from_none] tests/test_errors.py::test_errors[list:pop_from_missing] tests/test_errors.py::test_errors[list:subscript_slice_with_missing] tests/test_errors.py::test_errors[list:subscript_index_with_missing] tests/test_errors.py::test_errors[list:subscript:index_out_of_range] tests/test_errors.py::test_errors[list:getitem,illegal_key_type0] tests/test_errors.py::test_errors[list:getitem,illegal_key_type1] tests/test_errors.py::test_errors[list:setitem,illegal_value_type] tests/test_errors.py::test_errors[list:setitem,illegal_key_type] tests/test_errors.py::test_errors[list,readonly:setitem] tests/test_errors.py::test_errors[list:create_not_optional:_set_value(None)] tests/test_errors.py::test_errors[list,int_elements:assigned_str_element0] tests/test_errors.py::test_errors[list,int_elements:assigned_str_element1] tests/test_errors.py::test_errors[list,not_optional:null_assignment] tests/test_errors.py::test_errors[list,readonly:index_not_found] tests/test_errors.py::test_errors[list,readonly:insert] tests/test_errors.py::test_errors[list:insert_into_none] tests/test_errors.py::test_errors[list:insert_into_missing] tests/test_errors.py::test_errors[list:get_from_none] tests/test_errors.py::test_errors[list:get_from_missing] tests/test_errors.py::test_errors[list:readonly:sort0] tests/test_errors.py::test_errors[list:sort_from_none] tests/test_errors.py::test_errors[list:sort_from_missing] tests/test_errors.py::test_errors[list:readonly:sort1] tests/test_errors.py::test_errors[list:iter_none] tests/test_errors.py::test_errors[list:iter_missing] tests/test_errors.py::test_errors[list,readonly:del]
omegaconf/dictconfig.py omegaconf/nodes.py
omegaconf/dictconfig.py omegaconf/nodes.py