SF bug #1242657:   list(obj) can swallow KeyboardInterrupt

Fix over-aggressive PyErr_Clear().  The same code fragment appears in
various guises in list.extend(), map(), filter(), zip(), and internally
in PySequence_Tuple().
diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py
index 284edb3..14b54c7 100644
--- a/Lib/test/list_tests.py
+++ b/Lib/test/list_tests.py
@@ -514,3 +514,12 @@
         a = self.type2test(range(10))
         a[::2] = tuple(range(5))
         self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
+
+    def test_constructor_exception_handling(self):
+        # Bug #1242657
+        class F(object):
+            def __iter__(self):
+                yield 23
+            def __len__(self):
+                raise KeyboardInterrupt
+        self.assertRaises(KeyboardInterrupt, list, F())