Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix_dict does not wrap enumerate(d.items()) in a list #47

@yonran

Description

@yonran

Description

I was reading the source code of fixer_util.py and I noticed that one item enumerate was not like the others in consuming_calls because it does not actually consume the iterable in python 2 or python 3.

For example, fissix leaves this unchanged (without wrapping in list()) because it thinks that enumerate will consume the python 3 iterable: enumerate(d.items()). But it should wrap it in list because you might mutate d inside a loop: for i, x in enumerate(d.items()): del d[x] which will raise “RuntimeError: dictionary changed size during iteration” in python 3.

Instead, enumerate should be handled the same as iter.

Details

  • OS: any
  • Python version: any
  • fissix version: 21.6.6
  • Can you repro on master? yes
  • Can you repro in a clean virtualenv? yes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions