def subscript_to_tuple(subscript):
'''Convert a subscripted name of the form Name[(i1, ..., in)] to a
tuple ('Name', i1, ..., in).
'''
def err():
raise ValueError('Unexpected kind of slice: {}'.format(astunparse.unparse(subscript)))
# Get subscript name.
if isinstance(subscript.value, ast.Name):
name = subscript.value.id
else:
err()
# Get indices.
if isinstance(subscript.slice, ast.Index):
if isinstance(subscript.slice.value, ast.Num):
indices = [subscript.slice.value]
elif isinstance(subscript.slice.value, ast.Tuple):
indices = subscript.slice.value.elts
else:
err()
else:
err()
# Convert indices to python numbers.
int_indices = []
for i in indices:
if isinstance(i, ast.Num):
int_indices.append(i.n)
else:
err()
return tuple([name] + int_indices)
评论列表
文章目录