Skip to content

Commit 8188f6c

Browse files
BUG: Unclear error message when merging tables and passing invalid option to validate (#49419)
* improve the error message for invalid validate arguments * change error message in test_join * resolve merge conflict Co-authored-by: Marco Edward Gorelli <[email protected]>
1 parent cedd122 commit 8188f6c

File tree

4 files changed

+37
-3
lines changed

4 files changed

+37
-3
lines changed

doc/source/whatsnew/v2.0.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ Reshaping
477477
- Bug in :meth:`DataFrame.pivot` not respecting ``None`` as column name (:issue:`48293`)
478478
- Bug in :func:`join` when ``left_on`` or ``right_on`` is or includes a :class:`CategoricalIndex` incorrectly raising ``AttributeError`` (:issue:`48464`)
479479
- Bug in :meth:`DataFrame.pivot_table` raising ``ValueError`` with parameter ``margins=True`` when result is an empty :class:`DataFrame` (:issue:`49240`)
480+
- Clarified error message in :func:`merge` when passing invalid ``validate`` option (:issue:`49417`)
480481

481482
Sparse
482483
^^^^^^

pandas/core/reshape/merge.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,18 @@ def _validate(self, validate: str) -> None:
15681568
pass
15691569

15701570
else:
1571-
raise ValueError("Not a valid argument for validate")
1571+
raise ValueError(
1572+
f'"{validate}" is not a valid argument. '
1573+
"Valid arguments are:\n"
1574+
'- "1:1"\n'
1575+
'- "1:m"\n'
1576+
'- "m:1"\n'
1577+
'- "m:m"\n'
1578+
'- "one_to_one"\n'
1579+
'- "one_to_many"\n'
1580+
'- "many_to_one"\n'
1581+
'- "many_to_many"'
1582+
)
15721583

15731584

15741585
def get_join_indexers(

pandas/tests/frame/methods/test_join.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,18 @@ def test_suffix_on_list_join():
143143
def test_join_invalid_validate(left_no_dup, right_no_dup):
144144
# GH 46622
145145
# Check invalid arguments
146-
msg = "Not a valid argument for validate"
146+
msg = (
147+
'"invalid" is not a valid argument. '
148+
"Valid arguments are:\n"
149+
'- "1:1"\n'
150+
'- "1:m"\n'
151+
'- "m:1"\n'
152+
'- "m:m"\n'
153+
'- "one_to_one"\n'
154+
'- "one_to_many"\n'
155+
'- "many_to_one"\n'
156+
'- "many_to_many"'
157+
)
147158
with pytest.raises(ValueError, match=msg):
148159
left_no_dup.merge(right_no_dup, on="a", validate="invalid")
149160

pandas/tests/reshape/merge/test_merge.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -1253,7 +1253,18 @@ def test_validation(self):
12531253
merge(left_w_dups, right_w_dups, on="a", validate="one_to_many")
12541254

12551255
# Check invalid arguments
1256-
msg = "Not a valid argument for validate"
1256+
msg = (
1257+
'"jibberish" is not a valid argument. '
1258+
"Valid arguments are:\n"
1259+
'- "1:1"\n'
1260+
'- "1:m"\n'
1261+
'- "m:1"\n'
1262+
'- "m:m"\n'
1263+
'- "one_to_one"\n'
1264+
'- "one_to_many"\n'
1265+
'- "many_to_one"\n'
1266+
'- "many_to_many"'
1267+
)
12571268
with pytest.raises(ValueError, match=msg):
12581269
merge(left, right, on="a", validate="jibberish")
12591270

0 commit comments

Comments
 (0)