diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index a28875e..c0b1bfc 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -9,6 +9,7 @@
 #
 
 class RoundtripLegalSyntaxTestCase(unittest.TestCase):
+
     def roundtrip(self, f, s):
         st1 = f(s)
         t = st1.totuple()
@@ -134,6 +135,7 @@
 #
 
 class IllegalSyntaxTestCase(unittest.TestCase):
+
     def check_bad_tree(self, tree, label):
         try:
             parser.sequence2st(tree)
@@ -147,7 +149,7 @@
         self.check_bad_tree((1, 2, 3), "<junk>")
 
     def test_illegal_yield_1(self):
-        """Illegal yield statement: def f(): return 1; yield 1"""
+        # Illegal yield statement: def f(): return 1; yield 1
         tree = \
         (257,
          (264,
@@ -202,7 +204,7 @@
         self.check_bad_tree(tree, "def f():\n  return 1\n  yield 1")
 
     def test_illegal_yield_2(self):
-        """Illegal return in generator: def f(): return 1; yield 1"""
+        # Illegal return in generator: def f(): return 1; yield 1
         tree = \
         (257,
          (264,
@@ -266,7 +268,7 @@
         self.check_bad_tree(tree, "def f():\n  return 1\n  yield 1")
 
     def test_print_chevron_comma(self):
-        """Illegal input: print >>fp,"""
+        # Illegal input: print >>fp,
         tree = \
         (257,
          (264,
@@ -289,7 +291,7 @@
         self.check_bad_tree(tree, "print >>fp,")
 
     def test_a_comma_comma_c(self):
-        """Illegal input: a,,c"""
+        # Illegal input: a,,c
         tree = \
         (258,
          (311,
@@ -316,7 +318,7 @@
         self.check_bad_tree(tree, "a,,c")
 
     def test_illegal_operator(self):
-        """Illegal input: a $= b"""
+        # Illegal input: a $= b
         tree = \
         (257,
          (264,
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index 293b75f..e31e583 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -16,7 +16,7 @@
         self.a[-12] = self.b
 
     def test_basic(self):
-        """Verify .isrecursive() and .isreadable() w/o recursion."""
+        # Verify .isrecursive() and .isreadable() w/o recursion
         verify = self.assert_
         for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, uni("yaddayadda"),
                      self.a, self.b):
@@ -26,7 +26,7 @@
                    "expected isreadable for " + `safe`)
 
     def test_knotted(self):
-        """Verify .isrecursive() and .isreadable() w/ recursion."""
+        # Verify .isrecursive() and .isreadable() w/ recursion
         # Tie a knot.
         self.b[67] = self.a
         # Messy dict.
@@ -51,7 +51,7 @@
                    "expected isreadable for " + `safe`)
 
     def test_unreadable(self):
-        """Not recursive but not readable anyway."""
+        # Not recursive but not readable anyway
         verify = self.assert_
         for unreadable in type(3), pprint, pprint.isrecursive:
             verify(not pprint.isrecursive(unreadable),
@@ -60,7 +60,7 @@
                    "expected not isreadable for " + `unreadable`)
 
     def test_same_as_repr(self):
-        "Simple objects and small containers that should be same as repr()."
+        # Simple objects and small containers that should be same as repr()
         verify = self.assert_
         for simple in (0, 0L, 0+0j, 0.0, "", uni(""), (), [], {}, verify, pprint,
                        -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
@@ -77,7 +77,7 @@
 
 
     def test_basic_line_wrap(self):
-        """verify basic line-wrapping operation"""
+        # verify basic line-wrapping operation
         o = {'RPM_cal': 0,
              'RPM_cal2': 48059,
              'Speed_cal': 0,
@@ -105,6 +105,7 @@
 
 
 class DottedPrettyPrinter(pprint.PrettyPrinter):
+
     def format(self, object, context, maxlevels, level):
         if isinstance(object, str):
             if ' ' in object:
