too many values and too few values errors implemented for list comprehensions tuple unpacking.

This commit is contained in:
Dave Halter
2015-12-12 04:16:49 +01:00
parent 28585dcdba
commit 106f6f7f5a
3 changed files with 20 additions and 3 deletions

View File

@@ -22,6 +22,8 @@ CODES = {
'type-error-not-iterable': (11, TypeError, None),
'type-error-isinstance': (12, TypeError, None),
'type-error-not-subscriptable': (13, TypeError, None),
'value-error-too-many-values': (13, ValueError, None),
'value-error-too-few-values': (13, ValueError, None),
}

View File

@@ -392,16 +392,20 @@ def unpack_tuple_to_dict(evaluator, types, exprlist):
'testlist_star_expr'):
dct = {}
parts = iter(exprlist.children[::2])
for iter_types in py__iter__(evaluator, types, exprlist):
n = 1
for iter_types in enumerate(py__iter__(evaluator, types, exprlist)):
n += 1
try:
part = next(parts)
except StopIteration:
raise NotImplementedError
analysis.add(evaluator, 'value-error-too-many-values', part,
message="ValueError: too many values to unpack (expected %s)" % n)
else:
dct.update(unpack_tuple_to_dict(evaluator, iter_types, part))
has_parts = next(parts, None)
if has_parts is not None:
raise NotImplementedError
analysis.add(evaluator, 'value-error-too-few-values', has_parts,
message="ValueError: need more than %s values to unpack" % n)
return dct
elif exprlist.type == 'power':
# Something like ``arr[x], var = ...``.

View File

@@ -28,3 +28,14 @@ tuple(a + 3 for a in [''])
#! 19 name-error
(1 for a in [1] if NOT_DEFINED)
# ----------
# unbalanced sides.
# ----------
# ok
(1 for a, b in [(1, 2)])
#! 13 value-error-too-few-values
(1 for a, b, c in [(1, 2)])
#! 10 value-error-too-many-values
(1 for a, b in [(1, 2, 3)])