From 589a3dbcb5a1cc3feb0356de6ce0b7cc30a39567 Mon Sep 17 00:00:00 2001 From: Rahul Savani Date: Mon, 15 Dec 2025 12:12:49 +0000 Subject: [PATCH 1/2] better error handling in GamePlayers.__getitem__ --- src/pygambit/game.pxi | 5 ++++- tests/test_players.py | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pygambit/game.pxi b/src/pygambit/game.pxi index 69ca46587..7e03c1922 100644 --- a/src/pygambit/game.pxi +++ b/src/pygambit/game.pxi @@ -307,7 +307,10 @@ class GamePlayers: raise ValueError(f"Game has multiple players with label '{index}'") return matches[0] if isinstance(index, int): - return Player.wrap(self.game.deref().GetPlayer(index + 1)) + if index in range(self.game.deref().NumPlayers()): + return Player.wrap(self.game.deref().GetPlayer(index + 1)) + else: + raise IndexError("Index out of range") raise TypeError(f"Player index must be int or str, not {index.__class__.__name__}") @property diff --git a/tests/test_players.py b/tests/test_players.py index 9b02d0e8d..9aa01c42e 100644 --- a/tests/test_players.py +++ b/tests/test_players.py @@ -40,11 +40,12 @@ def test_player_index_by_string(): def test_player_index_out_of_range(): game = gbt.Game.new_table([2, 2]) assert len(game.players) == 2 - with pytest.raises(IndexError): + exp_error_msg = "Index out of range" + with pytest.raises(IndexError, match=exp_error_msg): _ = game.players[2] - with pytest.raises(IndexError): + with pytest.raises(IndexError, match=exp_error_msg): _ = game.players[3] - with pytest.raises(IndexError): + with pytest.raises(IndexError, match=exp_error_msg): _ = game.players[-1] From 5c6166753b0c501de48728e0da9237d400f86f81 Mon Sep 17 00:00:00 2001 From: Rahul Savani Date: Mon, 15 Dec 2025 14:58:19 +0000 Subject: [PATCH 2/2] use try except --- src/pygambit/game.pxi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pygambit/game.pxi b/src/pygambit/game.pxi index 7e03c1922..3ea378e96 100644 --- a/src/pygambit/game.pxi +++ b/src/pygambit/game.pxi @@ -307,10 +307,10 @@ class GamePlayers: raise ValueError(f"Game has multiple players with label '{index}'") return matches[0] if isinstance(index, int): - if index in range(self.game.deref().NumPlayers()): + try: return Player.wrap(self.game.deref().GetPlayer(index + 1)) - else: - raise IndexError("Index out of range") + except IndexError: + raise IndexError("Index out of range") from None raise TypeError(f"Player index must be int or str, not {index.__class__.__name__}") @property