Issue 28475: Improve error message for random.sample() with k < 0. (Contributed by Francisco Couzo).

This commit is contained in:
Raymond Hettinger 2016-11-21 14:34:33 -08:00
parent 546ce65968
commit bf87126a63
2 changed files with 2 additions and 1 deletions

View File

@ -314,7 +314,7 @@ class Random(_random.Random):
randbelow = self._randbelow randbelow = self._randbelow
n = len(population) n = len(population)
if not 0 <= k <= n: if not 0 <= k <= n:
raise ValueError("Sample larger than population") raise ValueError("Sample larger than population or is negative")
result = [None] * k result = [None] * k
setsize = 21 # size of a small set minus size of an empty list setsize = 21 # size of a small set minus size of an empty list
if k > 5: if k > 5:

View File

@ -110,6 +110,7 @@ class TestBasicOps:
self.assertEqual(self.gen.sample([], 0), []) # test edge case N==k==0 self.assertEqual(self.gen.sample([], 0), []) # test edge case N==k==0
# Exception raised if size of sample exceeds that of population # Exception raised if size of sample exceeds that of population
self.assertRaises(ValueError, self.gen.sample, population, N+1) self.assertRaises(ValueError, self.gen.sample, population, N+1)
self.assertRaises(ValueError, self.gen.sample, [], -1)
def test_sample_distribution(self): def test_sample_distribution(self):
# For the entire allowable range of 0 <= k <= N, validate that # For the entire allowable range of 0 <= k <= N, validate that