RuntimeError on first call to vars(posix)
Author: schuelermineCreated Oct 16, 2024Updated Aug 16, 2026
Reproduction
- Launch
ipythonin a terminal on Linux - Type
import posix - Type
vars(posix)
Observation
Python 3.12.5 (main, Aug 6 2024, 19:08:49) [GCC 13.3.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.26.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import posix
In [2]: vars(posix)
Out[2]: ---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
File /nix/store/r39j2wlg58cb3b4iz9x8cbh18icrlcrv-python3.12-ipython-8.26.0/lib/python3.12/site-packages/IPython/core/formatters.py:711, in PlainTextFormatter.__call__(self, obj)
704 stream = StringIO()
705 printer = pretty.RepresentationPrinter(stream, self.verbose,
706 self.max_width, self.newline,
707 max_seq_length=self.max_seq_length,
708 singleton_pprinters=self.singleton_printers,
709 type_pprinters=self.type_printers,
710 deferred_pprinters=self.deferred_printers)
--> 711 printer.pretty(obj)
712 printer.flush()
713 return stream.getvalue()
File /nix/store/r39j2wlg58cb3b4iz9x8cbh18icrlcrv-python3.12-ipython-8.26.0/lib/python3.12/site-packages/IPython/lib/pretty.py:394, in RepresentationPrinter.pretty(self, obj)
391 for cls in _get_mro(obj_class):
392 if cls in self.type_pprinters:
393 # printer registered in self.type_pprinters
--> 394 return self.type_pprinters[cls](obj, self, cycle)
395 else:
396 # deferred printer
397 printer = self._in_deferred_types(cls)
File /nix/store/r39j2wlg58cb3b4iz9x8cbh18icrlcrv-python3.12-ipython-8.26.0/lib/python3.12/site-packages/IPython/lib/pretty.py:695, in _dict_pprinter_factory.<locals>.inner(obj, p, cycle)
693 p.begin_group(step, start)
694 keys = obj.keys()
--> 695 for idx, key in p._enumerate(keys):
696 if idx:
697 p.text(',')
File /nix/store/r39j2wlg58cb3b4iz9x8cbh18icrlcrv-python3.12-ipython-8.26.0/lib/python3.12/site-packages/IPython/lib/pretty.py:297, in PrettyPrinter._enumerate(self, seq)
295 def _enumerate(self, seq):
296 """like enumerate, but with an upper limit on the number of items"""
--> 297 for idx, x in enumerate(seq):
298 if self.max_seq_length and idx >= self.max_seq_length:
299 self.text(',')
RuntimeError: dictionary changed size during iteration
Notes
Works correctly on subsequent vars(posix) calls, and if autocomplete has been used to suggest posix attributes before.
Environment
IPython: 8.26.0, obtained from nixpkgs 5633bcff0c6162b9e4b5f1264264611e950c8ec7 under python3Packages.ipython
Underlying Python: 3.12.5 (main, Aug 6 2024, 19:08:49) [GCC 13.3.0]
OS: NixOS 24.11.20241009.5633bcf (Vicuna), built from nixpkgs 5633bcff0c6162b9e4b5f1264264611e950c8ec7
Hardware: Lenovo Legion Y530-15ICH, Intel(R) Core(TM) i5-8300H (8) @ 4.00 GHz, 25072803840 bytes of memory
Source: ipython/ipython