module_name = getattr(obj, '__module__', None)
if module_name is not None:
return module_name
- for module_name, module in sys.modules.items():
+ # Protect the iteration by using a list copy of sys.modules against dynamic
+ # modules that trigger imports of other modules upon calls to getattr.
+ for module_name, module in list(sys.modules.items()):
if module_name == '__main__' or module is None:
continue
try:
Library
-------
+- Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules
+ is mutated while iterating. Patch by Olivier Grisel.
+
- Issue #22219: The zipfile module CLI now adds entries for directories
(including empty directories) in ZIP file.