From 4947cd01ae4ebcfb1ce97345d1e9232c331331da Mon Sep 17 00:00:00 2001 From: Martijn Pieters Date: Fri, 21 Aug 2015 08:44:09 +0100 Subject: [PATCH] Avoid altering dictionary size during iteration, by gathering keys that need to be deleted first. Fixes `RuntimeError` on Python 3 introduced in 53ea23128e375ef84511fd2b22b740eca15d0854 --- requests/sessions.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/requests/sessions.py b/requests/sessions.py index 7c754608..c3ef363c 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -62,10 +62,11 @@ def merge_setting(request_setting, session_setting, dict_class=OrderedDict): merged_setting = dict_class(to_key_val_list(session_setting)) merged_setting.update(to_key_val_list(request_setting)) - # Remove keys that are set to None. - for (k, v) in merged_setting.items(): - if v is None: - del merged_setting[k] + # Remove keys that are set to None. Extract keys first to avoid altering + # the dictionary during iteration. + none_keys = [k for (k, v) in merged_setting.items() if v is None] + for key in none_keys: + del merged_setting[key] return merged_setting