Misleading error message of the day

Ethan Furman ethan at stoneleaf.us
Thu Dec 8 14:09:23 EST 2011


Benjamin Kaplan wrote:
> On Thu, Dec 8, 2011 at 1:42 PM, Roy Smith <roy at panix.com> wrote:
>> (some,
>>  very,
>>  long,
>>  list,
>>  of,
>>  variable,
>>  names,
>>  to,
>>  get,
>>  the,
>>  stuff,
>>  unpacked,
>>  into) = function_that_should_return_a_14_tuple()
>>
>> raises
>>
>> ValueError: too many values to unpack
>>
>> Quick, what's the bug?  Did I forget a variable on the LHS, or is my function returning more things than it should?  I know it's supposed to be 14, but I don't know which side is wrong.  Had it said "... expected 13, got 14", I would know immediately.
>>
> 
> If the RHS was a tuple or a list, yes you could know immediately. But
> unpacking works with any iterable, so it probably doesn't special-case
> lists and tuples. Iterables don't have a size- they just keep going
> until StopIteration is raised. So in EVERY SINGLE CASE, you would get
> "expected n args, got n+1" even if the iterable would return 24 items
> instead of 14, or would never stop returning items.

Not so.  There could be fewer, in which you could see "expected 13 args, 
got 7."

~Ethan~



More information about the Python-list mailing list