From: Raymond Hettinger Date: Tue, 24 Feb 2009 11:27:15 +0000 (+0000) Subject: Use ABCs to validate documented restriction to Sets or Sequences. X-Git-Tag: v3.1a1~100 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=886687dcda94bfb4b1c5bd1c5152ef91011a9c1c;p=thirdparty%2FPython%2Fcpython.git Use ABCs to validate documented restriction to Sets or Sequences. --- diff --git a/Lib/random.py b/Lib/random.py index 95f44113bfdc..afec8a0e9006 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -43,6 +43,7 @@ from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil 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 @@ class Random(_random.Random): # 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: