diff -r 9ded2433dc2c Lib/secrets.py --- a/Lib/secrets.py Mon Nov 28 20:56:37 2016 +0200 +++ b/Lib/secrets.py Tue Dec 27 18:28:24 2016 +0530 @@ -25,7 +25,9 @@ choice = _sysrand.choice def randbelow(exclusive_upper_bound): - """Return a random int in the range [0, n).""" + """Return a random int in the range [0,n). Raises ValueError if n <= 0.""" + if exclusive_upper_bound <= 0: + raise ValueError("Upper bound must be positive.") return _sysrand._randbelow(exclusive_upper_bound) DEFAULT_ENTROPY = 32 # number of bytes to return by default diff -r 9ded2433dc2c Lib/test/test_secrets.py --- a/Lib/test/test_secrets.py Mon Nov 28 20:56:37 2016 +0200 +++ b/Lib/test/test_secrets.py Tue Dec 27 18:28:24 2016 +0530 @@ -70,6 +70,7 @@ for i in range(2, 10): self.assertIn(secrets.randbelow(i), range(i)) self.assertRaises(ValueError, secrets.randbelow, 0) + self.assertRaises(ValueError, secrets.randbelow, -1) class Token_Tests(unittest.TestCase):