attrs icon indicating copy to clipboard operation
attrs copied to clipboard

Wrong error message for inner validators

Open AdrianSosic opened this issue 1 year ago • 0 comments

This is a copy of the third issue collected in https://github.com/python-attrs/attrs/issues/1206 to enable separate tracking of the bug.

The issue

When a validation error in one of the inner validators of deep_iterable or deep_mapping occurs, an exception is thrown but the contained message is wrong. For example, using the following code:

@define
class A:
    x: List[str] = field(
        validator=deep_iterable(
            member_validator=[instance_of(str), min_len(1)],
            iterable_validator=and_(instance_of(list), min_len(1)),
        ),
    )

and calling A(["abc", ""]), you get the following error:

ValueError: Length of 'x' must be => 1: 0

It rightfully complains about the length of the second item in the list, but note that the message refers to attribute name x, which is incorrect, since it's not x that is too short but one of its items.

AdrianSosic avatar Feb 21 '24 15:02 AdrianSosic