diff Lib/random.py @ 51834:c0b9bc25cebb

Use ABCs to validate documented restriction to Sets or Sequences.
author Raymond Hettinger <python@rcn.com>
date Tue, 24 Feb 2009 11:27:15 +0000
parents fed2ae1e50c2
children 0e1b3c24d3e2
line wrap: on
line diff
--- a/Lib/random.py	Tue Feb 24 11:25:35 2009 +0000
+++ b/Lib/random.py	Tue Feb 24 11:27:15 2009 +0000
@@ -43,6 +43,7 @@
 from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
 from os import urandom as _urandom
 from binascii import hexlify as _hexlify
+import collections as _collections
 
 __all__ = ["Random","seed","random","uniform","randint","choice","sample",
            "randrange","shuffle","normalvariate","lognormvariate",
@@ -296,10 +297,10 @@
         # preferred since the list takes less space than the
         # set and it doesn't suffer from frequent reselections.
 
-        if isinstance(population, (set, frozenset)):
+        if isinstance(population, _collections.Set):
             population = tuple(population)
-        if not hasattr(population, '__getitem__') or hasattr(population, 'keys'):
-            raise TypeError("Population must be a sequence or set.  For dicts, use dict.keys().")
+        if not isinstance(population, _collections.Sequence):
+            raise TypeError("Population must be a sequence or Set.  For dicts, use list(d).")
         random = self.random
         n = len(population)
         if not 0 <= k <= n: