Found another difference between old and new print:
old print would suppress the softspace after \t.
diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py
index fed1a9c..9772a00 100644
--- a/Lib/test/test_pyexpat.py
+++ b/Lib/test/test_pyexpat.py
@@ -10,25 +10,25 @@
 
 class Outputter:
     def StartElementHandler(self, name, attrs):
-        print('Start element:\n\t', repr(name), sortdict(attrs))
+        print('Start element:\n\t' + repr(name), sortdict(attrs))
 
     def EndElementHandler(self, name):
-        print('End element:\n\t', repr(name))
+        print('End element:\n\t' + repr(name))
 
     def CharacterDataHandler(self, data):
         data = data.strip()
         if data:
             print('Character data:')
-            print('\t', repr(data))
+            print('\t' + repr(data))
 
     def ProcessingInstructionHandler(self, target, data):
-        print('PI:\n\t', repr(target), repr(data))
+        print('PI:\n\t' + repr(target), repr(data))
 
     def StartNamespaceDeclHandler(self, prefix, uri):
-        print('NS decl:\n\t', repr(prefix), repr(uri))
+        print('NS decl:\n\t' + repr(prefix), repr(uri))
 
     def EndNamespaceDeclHandler(self, prefix):
-        print('End of NS decl:\n\t', repr(prefix))
+        print('End of NS decl:\n\t' + repr(prefix))
 
     def StartCdataSectionHandler(self):
         print('Start of CDATA section')
@@ -37,7 +37,7 @@
         print('End of CDATA section')
 
     def CommentHandler(self, text):
-        print('Comment:\n\t', repr(text))
+        print('Comment:\n\t' + repr(text))
 
     def NotationDeclHandler(self, *args):
         name, base, sysid, pubid = args
@@ -45,7 +45,7 @@
 
     def UnparsedEntityDeclHandler(self, *args):
         entityName, base, systemId, publicId, notationName = args
-        print('Unparsed entity decl:\n\t', args)
+        print('Unparsed entity decl:\n\t' + str(args))
 
     def NotStandaloneHandler(self, userData):
         print('Not standalone')