--- ../feedparser/feedparsertest.py (original)
+++ ../feedparser/feedparsertest.py (refactored)
@@ -67,7 +67,7 @@
     headers.setdefault('Content-type', self.guess_type(path))
     self.send_header("Content-type", headers['Content-type'])
     self.send_header("Content-Length", str(os.fstat(f.fileno())[6]))
-    for k, v in headers.items():
+    for k, v in list(headers.items()):
       if k not in ('Status', 'Content-type'):
         self.send_header(k, v)
     self.end_headers()
@@ -103,7 +103,7 @@
     except:
       pass
     if not eval(evalString, env):
-      raise self.failureException, failure
+      raise self.failureException(failure)
   
 #---------- parse test files and create test methods ----------
 
@@ -126,24 +126,24 @@
     data = feedparser._ebcdic_to_ascii(data)
   elif data[:4] == '\x00\x00\xfe\xff':
     if not _utf32_available: return None, None, None, '0'
-    data = unicode(data, 'utf-32be').encode('utf-8')
+    data = str(data, 'utf-32be').encode('utf-8')
   elif data[:4] == '\xff\xfe\x00\x00':
     if not _utf32_available: return None, None, None, '0'
-    data = unicode(data, 'utf-32le').encode('utf-8')
+    data = str(data, 'utf-32le').encode('utf-8')
   elif data[:4] == '\x00\x00\x00\x3c':
     if not _utf32_available: return None, None, None, '0'
-    data = unicode(data, 'utf-32be').encode('utf-8')
+    data = str(data, 'utf-32be').encode('utf-8')
   elif data[:4] == '\x3c\x00\x00\x00':
     if not _utf32_available: return None, None, None, '0'
-    data = unicode(data, 'utf-32le').encode('utf-8')
+    data = str(data, 'utf-32le').encode('utf-8')
   elif data[:4] == '\x00\x3c\x00\x3f':
-    data = unicode(data, 'utf-16be').encode('utf-8')
+    data = str(data, 'utf-16be').encode('utf-8')
   elif data[:4] == '\x3c\x00\x3f\x00':
-    data = unicode(data, 'utf-16le').encode('utf-8')
+    data = str(data, 'utf-16le').encode('utf-8')
   elif (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'):
-    data = unicode(data[2:], 'utf-16be').encode('utf-8')
+    data = str(data[2:], 'utf-16be').encode('utf-8')
   elif (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'):
-    data = unicode(data[2:], 'utf-16le').encode('utf-8')
+    data = str(data[2:], 'utf-16le').encode('utf-8')
   elif data[:3] == '\xef\xbb\xbf':
     data = data[3:]
   skip_results = skip_re.search(data)
@@ -153,8 +153,8 @@
     skipUnless = '1'
   search_results = desc_re.search(data)
   if not search_results:
-    raise RuntimeError, "can't parse %s" % xmlfile
-  description, evalString = map(string.strip, list(search_results.groups()))
+    raise RuntimeError("can't parse %s" % xmlfile)
+  description, evalString = list(map(string.strip, list(search_results.groups())))
   description = xmlfile + ": " + description
   return TestCase.failUnlessEval, description, evalString, skipUnless
 
@@ -167,7 +167,7 @@
 if __name__ == "__main__":
   if sys.argv[1:]:
     import operator
-    allfiles = filter(lambda s: s.endswith('.xml'), reduce(operator.add, map(glob.glob, sys.argv[1:]), []))
+    allfiles = [s for s in reduce(operator.add, list(map(glob.glob, sys.argv[1:])), []) if s.endswith('.xml')]
     sys.argv = [sys.argv[0]] #+ sys.argv[2:]
   else:
     allfiles = glob.glob(os.path.join('.', 'tests', '**', '**', '*.xml'))
