[Python-checkins] (3.1): only do this sys.stderr replacing on CPython

benjamin.peterson python-checkins at python.org
Mon Mar 7 00:15:39 CET 2011


http://hg.python.org/cpython/rev/7d442fd36c96
changeset:   68310:7d442fd36c96
branch:      3.1
parent:      68306:12f0da000dc4
user:        Benjamin Peterson <benjamin at python.org>
date:        Sun Mar 06 17:14:30 2011 -0600
summary:
  only do this sys.stderr replacing on CPython

files:
  Lib/lib2to3/pytree.py

diff --git a/Lib/lib2to3/pytree.py b/Lib/lib2to3/pytree.py
--- a/Lib/lib2to3/pytree.py
+++ b/Lib/lib2to3/pytree.py
@@ -743,9 +743,11 @@
         else:
             # The reason for this is that hitting the recursion limit usually
             # results in some ugly messages about how RuntimeErrors are being
-            # ignored.
-            save_stderr = sys.stderr
-            sys.stderr = StringIO()
+            # ignored. We only have to do this on CPython, though, because other
+            # implementations don't have this nasty bug in the first place.
+            if hasattr(sys, "getrefcount"):
+                save_stderr = sys.stderr
+                sys.stderr = StringIO()
             try:
                 for count, r in self._recursive_matches(nodes, 0):
                     if self.name:
@@ -759,7 +761,8 @@
                         r[self.name] = nodes[:count]
                     yield count, r
             finally:
-                sys.stderr = save_stderr
+                if hasattr(sys, "getrefcount"):
+                    sys.stderr = save_stderr
 
     def _iterative_matches(self, nodes):
         """Helper to iteratively yield the matches."""

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list