SF bug #1460340:  random.sample can raise KeyError

Fix the hit and miss style of testing for sets and dicts.
diff --git a/Lib/random.py b/Lib/random.py
index b4ad2b3..943fa51 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -312,17 +312,18 @@
                 pool[j] = pool[n-i-1]   # move non-selected item into vacancy
         else:
             try:
-                n > 0 and (population[0], population[n//2], population[n-1])
-            except (TypeError, KeyError):   # handle non-sequence iterables
-                population = tuple(population)
-            selected = set()
-            selected_add = selected.add
-            for i in xrange(k):
-                j = _int(random() * n)
-                while j in selected:
+                selected = set()
+                selected_add = selected.add
+                for i in xrange(k):
                     j = _int(random() * n)
-                selected_add(j)
-                result[i] = population[j]
+                    while j in selected:
+                        j = _int(random() * n)
+                    selected_add(j)
+                    result[i] = population[j]
+            except (TypeError, KeyError):   # handle sets and dictionaries
+                if isinstance(population, list):
+                    raise
+                return self.sample(list(population), k)
         return result
 
 ## -------------------- real-valued distributions  -------------------