diff options
author | Raymond Hettinger <python@rcn.com> | 2004-09-05 00:00:42 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-09-05 00:00:42 (GMT) |
commit | c1c43cad63a88eae694b174c9a0fe6242dd5972b (patch) | |
tree | 7ece3cc683d61331c761c51dcf48e775bdb4c369 /Lib/random.py | |
parent | c4536a1deab6b14e4579e453289bd7648d144d36 (diff) | |
download | cpython-c1c43cad63a88eae694b174c9a0fe6242dd5972b.zip cpython-c1c43cad63a88eae694b174c9a0fe6242dd5972b.tar.gz cpython-c1c43cad63a88eae694b174c9a0fe6242dd5972b.tar.bz2 |
Fulfill Martin's request to use try/except rather than a "look before
you leap" approach. Makes the early call to os.urandom() unnecessary.
Diffstat (limited to 'Lib/random.py')
-rw-r--r-- | Lib/random.py | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/Lib/random.py b/Lib/random.py index e6f6e4b..46a1b1f 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -44,6 +44,8 @@ from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethod from math import log as _log, exp as _exp, pi as _pi, e as _e from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin from math import floor as _floor +from os import urandom as _urandom +from binascii import hexlify as _hexlify __all__ = ["Random","seed","random","uniform","randint","choice","sample", "randrange","shuffle","normalvariate","lognormvariate", @@ -59,13 +61,6 @@ SG_MAGICCONST = 1.0 + _log(4.5) BPF = 53 # Number of bits in a float RECIP_BPF = 2**-BPF -try: - from os import urandom as _urandom - from binascii import hexlify as _hexlify - _urandom(1) # verify that urandom is implemented -except (ImportError, NotImplementedError): - _urandom = None - # Translated by Guido van Rossum from C source provided by # Adrian Baddeley. Adapted by Raymond Hettinger for use with @@ -111,11 +106,11 @@ class Random(_random.Random): """ if a is None: - if _urandom is None: + try: + a = long(_hexlify(_urandom(16)), 16) + except NotImplementedError: import time a = long(time.time() * 256) # use fractional seconds - else: - a = long(_hexlify(_urandom(16)), 16) super(Random, self).seed(a) self.gauss_next = None @@ -620,11 +615,11 @@ class WichmannHill(Random): """ if a is None: - if _urandom is None: + try: + a = long(_hexlify(_urandom(16)), 16) + except NotImplementedError: import time a = long(time.time() * 256) # use fractional seconds - else: - a = long(_hexlify(_urandom(16)), 16) if not isinstance(a, (int, long)): a = hash(a) @@ -759,14 +754,10 @@ class HardwareRandom(Random): def random(self): """Get the next random number in the range [0.0, 1.0).""" - if _urandom is None: - raise NotImplementedError('Cannot find hardware entropy source') return (long(_hexlify(_urandom(7)), 16) >> 3) * RECIP_BPF def getrandbits(self, k): """getrandbits(k) -> x. Generates a long int with k random bits.""" - if _urandom is None: - raise NotImplementedError('Cannot find hardware entropy source') if k <= 0: raise ValueError('number of bits must be greater than zero') if k != int(k): |