Giter VIP home page Giter VIP logo

Comments (7)

mimre25 avatar mimre25 commented on June 20, 2024 2

Potentially. I'm actually working on it right now, so I'll also check this.

from flake8-bugbear.

JelleZijlstra avatar JelleZijlstra commented on June 20, 2024 2

this creates a new object that no longer depends on the original

That's not true in Python 3. Your code will throw RuntimeError: dictionary changed size during iteration.

from flake8-bugbear.

KumoLiu avatar KumoLiu commented on June 20, 2024

Same issue here:
https://github.com/Project-MONAI/MONAI/actions/runs/8777993558/job/24083761562#step:2:2647

https://github.com/Project-MONAI/MONAI/blob/03a5fa695ad02fcb916d5495e84f8f01883806e2/monai/apps/auto3dseg/auto_runner.py#L774

from flake8-bugbear.

mimre25 avatar mimre25 commented on June 20, 2024

Thanks for tagging me!

I'll take a look later this week and see if I can fix it right away, or if it blows up the scope (I doubt the latter one). 🙂

from flake8-bugbear.

gothicVI avatar gothicVI commented on June 20, 2024

Hi,

we're seeing complaints for code like

lst: list[dict] = [dic1, ..., dicn]
for dic in lst:
    dic["key"] = False

Is this related?

from flake8-bugbear.

mimre25 avatar mimre25 commented on June 20, 2024

I've created #469 - the fix was rather easy and simple, just an oversight in the initial implementation 😬

I've ran it on the black code base with the only hit being ./black/src/blib2to3/pgen2/pgen.py:235:21, which is a true positive considering the comment in line 223 (for state in states: # NB states grows while we're iterating).

With Project-MONAI, I could also eliminate the cases pointed out, however, there is a discussion point (hence the PR only being a draft):

Should B909 allow altering an element via it's dictionary key? For example:

some_dict = {...}
for key in some_dict:
    some_dict[key] = 3
    del some_dict[key]

Should this fire B909 or not? What do you think?

cc @cooperlees

from flake8-bugbear.

gothicVI avatar gothicVI commented on June 20, 2024

Should B909 allow altering an element via it's dictionary key? For example:

some_dict = {...}
for key in some_dict:
    some_dict[key] = 3
    del some_dict[key]

I'd argue it should fire due to the del.

EDIT: The following is incorrect and shouldn't be considered - I leave it here for completeness as it was partially quoted:

However, I'd also argue it shouldn't in such a case:

some_dict = {...}
for key in some_dict.keys():  # this creates a new object that no longer depends on the original
    some_dict[key] = 3
    del some_dict[key]

from flake8-bugbear.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.