Skip to content

traitlets Dict with per_key_traits should be more specific in a TraitError #920

@mpenning

Description

@mpenning

I'm using traitlets version 5.14.3 and Python 3.12.3...

  • The error raised by Dict() with per_key_traits should specify the offending key name in the error.
  • The error raised by Dict() with per_key_traits doesn't handle nested dicts well

Example:

from traitlets import HasTraits, Dict, Unicode

class Foo(HasTraits):
    bar = Dict(per_key_traits={"this": Unicode(), "that": Dict(per_key_traits={"that": Unicode()})})

foo = Foo()
# key that should be a Dict()...
foo.bar = {"this": "valid", "that": False}

The error raised is:

traitlets.traitlets.TraitError: Values of the 'bar' trait of a Foo instance must be a dict, but a value of False <class 'bool'> was specified.

It would be better if it specified the offending chain of keys in the error... Example:

traitlets.traitlets.TraitError: Value of bar['that'] for a Foo instance must be a dict, but the specified value at bar['that'] was False <class 'bool'>.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions