https://github.com/python/cpython/commit/d475f4d3787de4772856eb4ac6881157bb49c1aa
commit: d475f4d3787de4772856eb4ac6881157bb49c1aa
branch: 3.13
author: lighting9999 <[email protected]>
committer: hugovk <[email protected]>
date: 2026-07-29T21:01:54+03:00
summary:

[3.13] gh-149221:Fix binomialvariate Function for random module (#149279)

Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst
M Lib/random.py
M Lib/test/test_random.py

diff --git a/Lib/random.py b/Lib/random.py
index 7bb3c9a6fa08c4..25cf9bb42d22c0 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -828,7 +828,11 @@ def binomialvariate(self, n=1, p=0.5):
             if not c:
                 return x
             while True:
-                y += _floor(_log2(random()) / c) + 1
+                try:
+                    y += _floor(_log2(random()) / c) + 1
+                except ValueError:
+                    # Reject case where random() returned 0.0
+                    continue
                 if y > n:
                     return x
                 x += 1
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index 3c4aa91452443b..1e7be504bff24e 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -1101,6 +1101,13 @@ def test_avg_std(self):
             self.assertAlmostEqual(s2/(N-1), sigmasqrd, places=2,
                                    msg='%s%r' % (variate.__name__, args))
 
+    def test_binomialvariate_log_zero(self):
+        # gh-149222: Variety random() return 0.0 no input Error
+        with unittest.mock.patch.object(random.Random, 'random', 
side_effect=[0.0] + [0.5] * 20):
+            result = random.binomialvariate(10, 0.5)
+            self.assertIsInstance(result, int)
+            self.assertIn(result, range(11))
+
     def test_binomialvariate_btrs_random_zero(self):
         for p, expected in ((0.25, 25), (0.75, 75)):
             with self.subTest(p=p):
diff --git 
a/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst 
b/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst
new file mode 100644
index 00000000000000..fab2b0f6a23489
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst
@@ -0,0 +1 @@
+Catch rare math domain error for :func:`random.binomialvariate`.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to