summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/sets.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/Lib/sets.py b/Lib/sets.py
index bbb93a0..5a66a2e 100644
--- a/Lib/sets.py
+++ b/Lib/sets.py
@@ -319,10 +319,16 @@ class BaseSet(object):
data.update(iterable)
return
- value = True
+ # If the mere process of iterating may raise TypeError, materialize
+ # the iterable into a tuple first. Then the TypeError will get
+ # raised here and propagated back to the caller. Once we get into
+ # the loop following, TypeError is assumed to mean that element
+ # can't be used as a dict key.
if type(iterable) not in (list, tuple, dict, file, xrange, str):
- iterable = list(iterable)
+ iterable = tuple(iterable)
+
it = iter(iterable)
+ value = True
while True:
try:
for element in it: