[Python-checkins] python/dist/src/Lib random.py,1.66,1.67

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Sun Sep 5 02:00:48 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18618

Modified Files:
	random.py 
Log Message:
Fulfill Martin's request to use try/except rather than a "look before
you leap" approach.  Makes the early call to os.urandom() unnecessary.



Index: random.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/random.py,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- random.py	3 Sep 2004 19:09:22 -0000	1.66
+++ random.py	5 Sep 2004 00:00:41 -0000	1.67
@@ -44,6 +44,8 @@
 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 @@
 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 @@
         """
 
         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 @@
         """
 
         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 @@
 
     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):



More information about the Python-checkins mailing list