From 3fee7776e6ed8ab023a0220da1daf3160fda868b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 9 Dec 2021 20:24:50 -0600 Subject: Move error test to the function that needs it. Improve error message. (GH-30008) --- Lib/random.py | 11 ++++------- Lib/test/test_random.py | 4 ---- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/Lib/random.py b/Lib/random.py index 92a71e1..e8bc941 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -233,10 +233,8 @@ class Random(_random.Random): break def _randbelow_with_getrandbits(self, n): - "Return a random int in the range [0,n). Returns 0 if n==0." + "Return a random int in the range [0,n). Defined for n > 0." - if not n: - return 0 getrandbits = self.getrandbits k = n.bit_length() # don't use (n-1) here because n can be 1 r = getrandbits(k) # 0 <= r < 2**k @@ -245,7 +243,7 @@ class Random(_random.Random): return r def _randbelow_without_getrandbits(self, n, maxsize=1< 0. The implementation does not use getrandbits, but only random. """ @@ -256,8 +254,6 @@ class Random(_random.Random): "enough bits to choose from a population range this large.\n" "To remove the range limitation, add a getrandbits() method.") return _floor(random() * n) - if n == 0: - return 0 rem = maxsize % n limit = (maxsize - rem) / maxsize # int(limit * maxsize) % n == 0 r = random() @@ -338,7 +334,8 @@ class Random(_random.Random): def choice(self, seq): """Choose a random element from a non-empty sequence.""" - # raises IndexError if seq is empty + if not seq: + raise IndexError('Cannot choose from an empty sequence') return seq[self._randbelow(len(seq))] def shuffle(self, x): diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index cdae889..b80aeca 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -816,10 +816,6 @@ class MersenneTwister_TestBasicOps(TestBasicOps, unittest.TestCase): maxsize+1, maxsize=maxsize ) self.gen._randbelow_without_getrandbits(5640, maxsize=maxsize) - # issue 33203: test that _randbelow returns zero on - # n == 0 also in its getrandbits-independent branch. - x = self.gen._randbelow_without_getrandbits(0, maxsize=maxsize) - self.assertEqual(x, 0) # This might be going too far to test a single line, but because of our # noble aim of achieving 100% test coverage we need to write a case in -- cgit v0.12