Issue 29853: Improve exception messages for remove and index methods (original) (raw)
Currently, there's a discrepancy in the exception reporting for the .index
and .remove
methods of many objects:
For arrays:
array.remove(val) -> ValueError: array.remove(x): x not in list
array.index(val) -> ValueError: array.index(x): x not in list
not only is always printing x
not in list not informative, it's wrong since it isn't a list.
For tuples:
tuple.index(val) -> ValueError: tuple.index(x): x not in tuple
For lists:
list.remove(val) -> ValueError: list.remove(x): x not in list
list.index(val) produces a more informative message: ValueError: is not in list
For deques:
deque.remove(val) -> ValueError: deque.remove(x): x not in deque
similarly to lists, deque.index(val)
prints the actual argument supplied.
I'm not sure if there's valid reasoning behind not providing the repr of the arguments in all remove
methods but, if there isn't, I'd like to suggest changing all of them to use PyErr_Format and produce more informative messages:
array.remove(val) -> ValueError: <val> is not in array
array.index(val) -> ValueError: <val> is not in array
tuple.index(val) -> ValueError: <val> is not in tuple
list.remove(val) -> ValueError: <val> is not in list
deque.remove(val) -> ValueError: <val> is not in deque