RuntimeError: dictionary changed size during iteration

Discuss how to use the Ren'Py engine to create visual novels and story-based games. New releases are announced in this section.
Forum rules
This is the right place for Ren'Py help. Please ask one question per thread, use a descriptive subject like 'NotFound error in option.rpy' , and include all the relevant information - especially any relevant code and traceback messages. Use the code tag to format scripts.
Post Reply
Message
Author
User avatar
vollschauer
Veteran
Posts: 231
Joined: Sun Oct 11, 2015 9:38 am
Github: vollschauer
Contact:

RuntimeError: dictionary changed size during iteration

#1 Post by vollschauer »

I have a replay screen with 20 buttons, they basically look all like this (i from 0 to 19) :

Code: Select all

action Replay("system_movie_page01_main", scope={"gallery": i}, locked=persistem.something)
Now if I click random the buttons to test if the replays are working I get from time to time those 2 errors:
Someone ever had such error and any idea how to track them down? Since the only dictionary I use or see here is the scope={"gallery": i}...!?

Code: Select all

I'm sorry, but an uncaught exception occurred.

While running game code:
  File "renpy/common/00start.rpy", line 164, in script
    $ _init_language()
  File "renpy/common/00start.rpy", line 164, in <module>
    $ _init_language()
  File "renpy/common/00start.rpy", line 79, in _init_language
    renpy.change_language(language)
RuntimeError: dictionary changed size during iteration

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "renpy/common/00start.rpy", line 164, in script
    $ _init_language()
  File "/home/user/RenPy/renpy-nightly/renpy/ast.py", line 848, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "/home/user/RenPy/renpy-nightly/renpy/python.py", line 1812, in py_exec_bytecode
    exec bytecode in globals, locals
  File "renpy/common/00start.rpy", line 164, in <module>
    $ _init_language()
  File "renpy/common/00start.rpy", line 79, in _init_language
    renpy.change_language(language)
  File "/home/user/RenPy/renpy-nightly/renpy/translation/__init__.py", line 588, in change_language
    new_change_language(tl, language)
  File "/home/user/RenPy/renpy-nightly/renpy/translation/__init__.py", line 552, in new_change_language
    renpy.game.invoke_in_new_context(run_blocks)
  File "/home/user/RenPy/renpy-nightly/renpy/game.py", line 277, in invoke_in_new_context
    context = renpy.execution.Context(False, contexts[-1], clear=True)
  File "/home/user/RenPy/renpy-nightly/renpy/execution.py", line 266, in __init__
    for k, v in context.music.iteritems():
RuntimeError: dictionary changed size during iteration

Linux-4.14.8-gentoo-r1-x86_64-Intel-R-_Core-TM-_i7-3770K_CPU_@_3.50GHz-with-gentoo-2.4.1
Ren'Py 6.99.14.1.3140

Code: Select all

I'm sorry, but an uncaught exception occurred.

While running game code:
  File "renpy/common/00action_other.rpy", line 392, in __call__
    renpy.call_replay(self.label, self.scope)
  File "game/system_movie_page01_main.rpy", line 1, in script
    label system_movie_page01_main:
  File "game/system_movie_page01_main.rpy", line 1, in script
    label system_movie_page01_main:
RuntimeError: dictionary changed size during iteration

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
    python hide:
  File "/home/user/RenPy/renpy-nightly/renpy/ast.py", line 848, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "/home/user/RenPy/renpy-nightly/renpy/python.py", line 1812, in py_exec_bytecode
    exec bytecode in globals, locals
  File "renpy/common/_layout/screen_main_menu.rpym", line 35, in <module>
    ui.interact()
  File "/home/user/RenPy/renpy-nightly/renpy/ui.py", line 287, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "/home/user/RenPy/renpy-nightly/renpy/display/core.py", line 2620, in interact
    repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, **kwargs)
  File "/home/user/RenPy/renpy-nightly/renpy/display/core.py", line 3375, in interact_core
    rv = root_widget.event(ev, x, y, 0)
  File "/home/user/RenPy/renpy-nightly/renpy/display/layout.py", line 986, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "/home/user/RenPy/renpy-nightly/renpy/display/transition.py", line 156, in event
    return self.transitions[-1].event(ev, x, y, st)
  File "/home/user/RenPy/renpy-nightly/renpy/display/transition.py", line 45, in event
    return self.new_widget.event(ev, x, y, st)  # E1101
  File "/home/user/RenPy/renpy-nightly/renpy/display/layout.py", line 986, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "/home/user/RenPy/renpy-nightly/renpy/display/layout.py", line 986, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "/home/user/RenPy/renpy-nightly/renpy/display/screen.py", line 667, in event
    rv = self.child.event(ev, x, y, st)
  File "/home/user/RenPy/renpy-nightly/renpy/display/layout.py", line 986, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "/home/user/RenPy/renpy-nightly/renpy/display/behavior.py", line 897, in event
    return handle_click(self.clicked)
  File "/home/user/RenPy/renpy-nightly/renpy/display/behavior.py", line 832, in handle_click
    rv = run(action)
  File "/home/user/RenPy/renpy-nightly/renpy/display/behavior.py", line 306, in run
    return action(*args, **kwargs)
  File "renpy/common/00action_other.rpy", line 392, in __call__
    renpy.call_replay(self.label, self.scope)
  File "/home/user/RenPy/renpy-nightly/renpy/game.py", line 391, in call_replay
    renpy.execution.run_context(False)
  File "/home/user/RenPy/renpy-nightly/renpy/execution.py", line 835, in run_context
    context.run()
  File "game/system_movie_page01_main.rpy", line 1, in script
    label system_movie_page01_main:
  File "/home/user/RenPy/renpy-nightly/renpy/python.py", line 1335, in begin
    self.current = Rollback()
  File "/home/user/RenPy/renpy-nightly/renpy/python.py", line 1088, in __init__
    self.context = renpy.game.context().rollback_copy()
  File "game/system_movie_page01_main.rpy", line 1, in script
    label system_movie_page01_main:
  File "/home/user/RenPy/renpy-nightly/renpy/execution.py", line 266, in __init__
    for k, v in context.music.iteritems():
RuntimeError: dictionary changed size during iteration

Linux-4.14.8-gentoo-r1-x86_64-Intel-R-_Core-TM-_i7-3770K_CPU_@_3.50GHz-with-gentoo-2.4.1
Ren'Py 6.99.14.1.3140

User avatar
PyTom
Ren'Py Creator
Posts: 16096
Joined: Mon Feb 02, 2004 10:58 am
Completed: Moonlight Walks
Projects: Ren'Py
IRC Nick: renpytom
Github: renpytom
itch: renpytom
Location: Kings Park, NY
Contact:

Re: RuntimeError: dictionary changed size during iteration

#2 Post by PyTom »

I just fixed this.
Supporting creators since 2004
(When was the last time you backed up your game?)
"Do good work." - Virgil Ivan "Gus" Grissom
Software > Drama • https://www.patreon.com/renpytom

Post Reply

Who is online

Users browsing this forum: MisterPinetree