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