GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Fix RuntimeError when pretty-printing a dict mutated during iteration by bobby-nandigam · Pull Request #15472 · ipython/ipython ConversationSummaryFixes #14541. Pretty-printing a mapping that mutates while it is being formatted raised: The reported trigger is Root cause
keys = obj.keys() for idx, key in p._enumerate(keys): ... p.pretty(obj[key]) If anything mutates FixSnapshot the items once, up front, and iterate that snapshot: items = list(obj.items()) for idx, (key, value) in p._enumerate(items): ... p.pretty(value) The live mapping is now read exactly once, before any value is formatted, so a Testing
NotesAdded a
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactionsThe dict pretty-printer iterated a live key view (obj.keys()) and looked up each value with obj[key]. A mapping that grows while being formatted -- for example a module's __dict__ that populates lazily on first attribute access, as happens with vars(posix) on its first call -- therefore raised "RuntimeError: dictionary changed size during iteration". Snapshot the mapping's items with list(obj.items()) before iterating so the live mapping is read exactly once, up front. This also removes the second live lookup per key. Behaviour for ordinary, non-mutating mappings is unchanged. Add a regression test that formats a dict which grows while one of its values is being pretty-printed. Fixes ipython#14541
raidos23
reviewed
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we limit the snapshot to the number of items that can actually be formatted? Currently, For very large dictionaries, this can result in unnecessary memory consumption compared to the previous implementation. One possible approach would be to use
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactionsThis branch has not been deployedNo deployments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Reviewers1 more reviewerUh oh!
There was an error while loading. Please reload this page. AssigneesNo one assignedLabels
None yet
ProjectsMilestoneNo milestoneDevelopmentSuccessfully merging this pull request may close these issues. RuntimeError on first call to vars(posix)Uh oh!
There was an error while loading. Please reload this page. Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later. |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |