Skip to content

Commit 3fee777

Browse files
authored
Move error test to the function that needs it. Improve error message. (GH-30008)
1 parent 5066908 commit 3fee777

File tree

2 files changed

+4
-11
lines changed

2 files changed

+4
-11
lines changed

Lib/random.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,8 @@ def __init_subclass__(cls, /, **kwargs):
233233
break
234234

235235
def _randbelow_with_getrandbits(self, n):
236-
"Return a random int in the range [0,n). Returns 0 if n==0."
236+
"Return a random int in the range [0,n). Defined for n > 0."
237237

238-
if not n:
239-
return 0
240238
getrandbits = self.getrandbits
241239
k = n.bit_length() # don't use (n-1) here because n can be 1
242240
r = getrandbits(k) # 0 <= r < 2**k
@@ -245,7 +243,7 @@ def _randbelow_with_getrandbits(self, n):
245243
return r
246244

247245
def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF):
248-
"""Return a random int in the range [0,n). Returns 0 if n==0.
246+
"""Return a random int in the range [0,n). Defined for n > 0.
249247
250248
The implementation does not use getrandbits, but only random.
251249
"""
@@ -256,8 +254,6 @@ def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF):
256254
"enough bits to choose from a population range this large.\n"
257255
"To remove the range limitation, add a getrandbits() method.")
258256
return _floor(random() * n)
259-
if n == 0:
260-
return 0
261257
rem = maxsize % n
262258
limit = (maxsize - rem) / maxsize # int(limit * maxsize) % n == 0
263259
r = random()
@@ -338,7 +334,8 @@ def randint(self, a, b):
338334

339335
def choice(self, seq):
340336
"""Choose a random element from a non-empty sequence."""
341-
# raises IndexError if seq is empty
337+
if not seq:
338+
raise IndexError('Cannot choose from an empty sequence')
342339
return seq[self._randbelow(len(seq))]
343340

344341
def shuffle(self, x):

Lib/test/test_random.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -816,10 +816,6 @@ def test_randbelow_without_getrandbits(self):
816816
maxsize+1, maxsize=maxsize
817817
)
818818
self.gen._randbelow_without_getrandbits(5640, maxsize=maxsize)
819-
# issue 33203: test that _randbelow returns zero on
820-
# n == 0 also in its getrandbits-independent branch.
821-
x = self.gen._randbelow_without_getrandbits(0, maxsize=maxsize)
822-
self.assertEqual(x, 0)
823819

824820
# This might be going too far to test a single line, but because of our
825821
# noble aim of achieving 100% test coverage we need to write a case in

0 commit comments

Comments
 (0)