From b54f1891e6d98c732792a53c78972e22ad790e46 Mon Sep 17 00:00:00 2001 From: Addison Fischer Date: Fri, 6 Mar 2026 17:41:46 -0500 Subject: [PATCH 1/2] Improve settings string parse error message IndexError raised when a settings string index exceeds the available choices and gives no context on which setting failed. Added bounds checks in the list/str type branches of the update_with_settings_string() function to raise a descriptive ValueError instead. --- Settings.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Settings.py b/Settings.py index 1753d9c91d..2a5893b58c 100644 --- a/Settings.py +++ b/Settings.py @@ -205,6 +205,12 @@ def update_with_settings_string(self, text: str) -> None: index = 0 for b in range(setting.bitwidth): index |= cur_bits[b] << b + if index >= len(setting.choice_list): + raise ValueError( + f"Settings string is invalid or was generated by a newer version " + f"of the randomizer. Setting '{setting.name}' contains index " + f"{index} but only {len(setting.choice_list)} choices are available." + ) value = setting.choice_list[index] elif setting.type == int: value = 0 @@ -225,7 +231,12 @@ def update_with_settings_string(self, text: str) -> None: if index == max_index: value = [item for item in setting.choice_list if item not in value] break - + if index - 1 >= len(setting.choice_list): + raise ValueError( + f"Settings string is invalid or was generated by a newer version " + f"of the randomizer. Setting '{setting.name}' contains index " + f"{index} but only {len(setting.choice_list)} choices are available." + ) value.append(setting.choice_list[index-1]) cur_bits = bits[:setting.bitwidth] bits = bits[setting.bitwidth:] From d775bee193935408b1a58a06e4dfc5743e0e98dc Mon Sep 17 00:00:00 2001 From: Addison Fischer Date: Fri, 6 Mar 2026 20:03:51 -0500 Subject: [PATCH 2/2] Updated string 'newer' -> 'different' in error message --- Settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Settings.py b/Settings.py index 2a5893b58c..eb8860224d 100644 --- a/Settings.py +++ b/Settings.py @@ -207,7 +207,7 @@ def update_with_settings_string(self, text: str) -> None: index |= cur_bits[b] << b if index >= len(setting.choice_list): raise ValueError( - f"Settings string is invalid or was generated by a newer version " + f"Settings string is invalid or was generated by a different version " f"of the randomizer. Setting '{setting.name}' contains index " f"{index} but only {len(setting.choice_list)} choices are available." ) @@ -233,7 +233,7 @@ def update_with_settings_string(self, text: str) -> None: break if index - 1 >= len(setting.choice_list): raise ValueError( - f"Settings string is invalid or was generated by a newer version " + f"Settings string is invalid or was generated by a different version " f"of the randomizer. Setting '{setting.name}' contains index " f"{index} but only {len(setting.choice_list)} choices are available." )