Skip to content

Commit 2e8cfda

Browse files
Raise TypeError instead of ValueError.
1 parent fcd6549 commit 2e8cfda

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

Doc/library/random.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ Functions for integers
135135
values. Formerly it used a style like ``int(random()*n)`` which could produce
136136
slightly uneven distributions.
137137

138+
.. versionchanged:: 3.10
139+
Formerly :exc:`ValueError` could be raised for non-integer arguments
140+
instead of :exc:`TypeError`.
141+
138142
.. deprecated:: 3.10
139143
Accepting non-integer arguments is deprecated.
140144

Lib/random.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def randrange(self, start, stop=None, step=1):
303303
except TypeError:
304304
istart = int(start)
305305
if istart != start:
306-
raise ValueError("non-integer arg 1 for randrange()")
306+
raise TypeError("non-integer arg 1 for randrange()")
307307
_warn('non-integer arg 1 for randrange()',
308308
DeprecationWarning, 2)
309309
if stop is None:
@@ -317,7 +317,7 @@ def randrange(self, start, stop=None, step=1):
317317
except TypeError:
318318
istop = int(stop)
319319
if istop != stop:
320-
raise ValueError("non-integer stop for randrange()")
320+
raise TypeError("non-integer stop for randrange()")
321321
_warn('non-integer stop for randrange()',
322322
DeprecationWarning, 2)
323323
width = istop - istart
@@ -326,7 +326,7 @@ def randrange(self, start, stop=None, step=1):
326326
except TypeError:
327327
istep = int(step)
328328
if istep != step:
329-
raise ValueError("non-integer step for randrange()")
329+
raise TypeError("non-integer step for randrange()")
330330
_warn('non-integer step for randrange()',
331331
DeprecationWarning, 2)
332332
# Fast path.

Lib/test/test_random.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -504,28 +504,40 @@ def test_randrange_nonunit_step(self):
504504
rint = self.gen.randrange(0, 2, 2)
505505
self.assertEqual(rint, 0)
506506

507+
def test_randrange_non_integers(self):
508+
randrange = self.gen.randrange
509+
with self.assertWarns(DeprecationWarning):
510+
self.assertIn(randrange(3.0), range(3))
511+
with self.assertWarns(DeprecationWarning):
512+
self.assertIn(randrange(0, 3.0), range(0, 3))
513+
with self.assertWarns(DeprecationWarning):
514+
self.assertIn(randrange(0, 42, 1.0), range(0, 42, 1))
515+
with self.assertWarns(DeprecationWarning):
516+
self.assertIn(randrange(0, 42, 3.0), range(0, 42, 3))
517+
507518
def test_randrange_errors(self):
508-
raises = partial(self.assertRaises, ValueError, self.gen.randrange)
519+
randrange = self.gen.randrange
520+
raises = partial(self.assertRaises, ValueError, randrange)
509521
# Empty range
510522
raises(3, 3)
511523
raises(-721)
512524
raises(0, 100, -12)
513525
self.assertWarns(DeprecationWarning, raises, 3, 3, 1.0)
514526
# Non-integer start/stop
515-
raises(3.14159)
516-
self.assertWarns(DeprecationWarning, self.gen.randrange, 3.0)
517-
self.assertWarns(DeprecationWarning, self.gen.randrange, Fraction(3, 1))
518-
raises('3')
519-
raises(0, 2.71828)
520-
self.assertWarns(DeprecationWarning, self.gen.randrange, 0, 2.0)
521-
self.assertWarns(DeprecationWarning, self.gen.randrange, 0, Fraction(2, 1))
522-
raises(0, '2')
527+
self.assertRaises(TypeError, randrange, 3.14159)
528+
self.assertWarns(DeprecationWarning, randrange, 3.0)
529+
self.assertWarns(DeprecationWarning, randrange, Fraction(3, 1))
530+
self.assertRaises(TypeError, randrange, '3')
531+
self.assertRaises(TypeError, randrange, 0, 2.71828)
532+
self.assertWarns(DeprecationWarning, randrange, 0, 2.0)
533+
self.assertWarns(DeprecationWarning, randrange, 0, Fraction(2, 1))
534+
self.assertRaises(TypeError, randrange, 0, '2')
523535
# Zero and non-integer step
524536
raises(0, 42, 0)
525-
raises(0, 42, 3.14159)
526-
self.assertWarns(DeprecationWarning, self.gen.randrange, 0, 42, 3.0)
527-
self.assertWarns(DeprecationWarning, self.gen.randrange, 0, 42, Fraction(3, 1))
528-
raises(0, 42, '3')
537+
self.assertRaises(TypeError, randrange, 0, 42, 3.14159)
538+
self.assertWarns(DeprecationWarning, randrange, 0, 42, 3.0)
539+
self.assertWarns(DeprecationWarning, randrange, 0, 42, Fraction(3, 1))
540+
self.assertRaises(TypeError, randrange, 0, 42, '3')
529541

530542
def test_randbelow_logic(self, _log=log, int=int):
531543
# check bitcount transition points: 2**i and 2**(i+1)-1
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
Deprecated support of non-integer arguments in :func:`random.randrange`.
2+
:exc:`TypeError` is now always raised for wrong type of arguments
3+
(formerly :exc:`ValueError` could be raised for some non-integer arguments).

0 commit comments

Comments
 (0)