Message314787
| Author |
wolma |
| Recipients |
rhettinger, serhiy.storchaka, wolma |
| Date |
2018年04月01日.20:04:10 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1522613050.8.0.467229070634.issue33203@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
from https://docs.python.org/3/library/random.html#random.choice:
Return a random element from the non-empty sequence seq. If seq is empty, raises IndexError.
Indeed:
>>> import random
>>> random.choice([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/wolma/cpython/random.py", line 259, in choice
raise IndexError('Cannot choose from an empty sequence') from None
IndexError: Cannot choose from an empty sequence
but when not using getrandbits internally:
>>> class MyRandom(random.Random):
... def random(self):
... return super().random()
...
>>> my_random=MyRandom()
>>> my_random.choice([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/wolma/cpython/random.py", line 257, in choice
i = self._randbelow(len(seq))
File "/home/wolma/cpython/random.py", line 245, in _randbelow
rem = maxsize % n
ZeroDivisionError: integer division or modulo by zero
This is because the ValueError that random.choice tries to catch gets raised only in the getrandbits-dependent branch of Random._randbelow, but not in the branch using only Random.random (even though Random._randbelow suggests uniform behaviour. |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2018年04月01日 20:04:10 | wolma | set | recipients:
+ wolma, rhettinger, serhiy.storchaka |
| 2018年04月01日 20:04:10 | wolma | set | messageid: <1522613050.8.0.467229070634.issue33203@psf.upfronthosting.co.za> |
| 2018年04月01日 20:04:10 | wolma | link | issue33203 messages |
| 2018年04月01日 20:04:10 | wolma | create |
|