[Python-checkins] bpo-44712: Replace "type(literal)" with corresponding builtin types (GH-27294)

serhiy-storchaka webhook-mailer at python.org
Sun May 8 10:10:46 EDT 2022


https://github.com/python/cpython/commit/3680ebed7f3e529d01996dd0318601f9f0d02b4b
commit: 3680ebed7f3e529d01996dd0318601f9f0d02b4b
branch: main
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2022-05-08T17:10:11+03:00
summary:

bpo-44712: Replace "type(literal)" with corresponding builtin types (GH-27294)

I suppose it is a remnants of very old code written when str, int, list, dict, etc
were functions and not classes.

files:
M Lib/cgitb.py
M Lib/csv.py
M Lib/curses/ascii.py
M Lib/distutils/command/register.py
M Lib/ftplib.py
M Lib/getopt.py
M Lib/idlelib/browser.py
M Lib/lib2to3/pgen2/token.py
M Lib/plistlib.py
M Lib/pty.py
M Lib/pydoc.py
M Lib/sunau.py
M Lib/test/test_copyreg.py
M Lib/test/test_descr.py
M Lib/test/test_pprint.py
M Lib/test/test_timeout.py
M Lib/xmlrpc/client.py
M Mac/BuildScript/build-installer.py
M Tools/scripts/mailerdaemon.py

diff --git a/Lib/cgitb.py b/Lib/cgitb.py
index 8ce0e833a989a..f6b97f25c59de 100644
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -74,7 +74,7 @@ def lookup(name, frame, locals):
         return 'global', frame.f_globals[name]
     if '__builtins__' in frame.f_globals:
         builtins = frame.f_globals['__builtins__']
-        if type(builtins) is type({}):
+        if isinstance(builtins, dict):
             if name in builtins:
                 return 'builtin', builtins[name]
         else:
diff --git a/Lib/csv.py b/Lib/csv.py
index bb3ee269ae793..a0782705d5af1 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -428,7 +428,7 @@ def has_header(self, sample):
         # on whether it's a header
         hasHeader = 0
         for col, colType in columnTypes.items():
-            if type(colType) == type(0): # it's a length
+            if isinstance(colType, int): # it's a length
                 if len(header[col]) != colType:
                     hasHeader += 1
                 else:
diff --git a/Lib/curses/ascii.py b/Lib/curses/ascii.py
index 5b243be68111f..95acff33925ed 100644
--- a/Lib/curses/ascii.py
+++ b/Lib/curses/ascii.py
@@ -46,7 +46,7 @@
 ]
 
 def _ctoi(c):
-    if type(c) == type(""):
+    if isinstance(c, str):
         return ord(c)
     else:
         return c
@@ -69,19 +69,19 @@ def isctrl(c): return 0 <= _ctoi(c) < 32
 def ismeta(c): return _ctoi(c) > 127
 
 def ascii(c):
-    if type(c) == type(""):
+    if isinstance(c, str):
         return chr(_ctoi(c) & 0x7f)
     else:
         return _ctoi(c) & 0x7f
 
 def ctrl(c):
-    if type(c) == type(""):
+    if isinstance(c, str):
         return chr(_ctoi(c) & 0x1f)
     else:
         return _ctoi(c) & 0x1f
 
 def alt(c):
-    if type(c) == type(""):
+    if isinstance(c, str):
         return chr(_ctoi(c) | 0x80)
     else:
         return _ctoi(c) | 0x80
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index 0fac94e9e5490..170f5497141c9 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -260,7 +260,7 @@ def post_to_server(self, data, auth=None):
         body = io.StringIO()
         for key, value in data.items():
             # handle multiple entries for the same name
-            if type(value) not in (type([]), type( () )):
+            if not isinstance(value, (list, tuple)):
                 value = [value]
             for value in value:
                 value = str(value)
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index 7c5a50715f6dc..dc9a8afbd8d24 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -561,7 +561,7 @@ def dir(self, *args):
         LIST command.  (This *should* only be used for a pathname.)'''
         cmd = 'LIST'
         func = None
-        if args[-1:] and type(args[-1]) != type(''):
+        if args[-1:] and not isinstance(args[-1], str):
             args, func = args[:-1], args[-1]
         for arg in args:
             if arg:
diff --git a/Lib/getopt.py b/Lib/getopt.py
index 9d4cab1bac360..5419d77f5d774 100644
--- a/Lib/getopt.py
+++ b/Lib/getopt.py
@@ -81,7 +81,7 @@ def getopt(args, shortopts, longopts = []):
     """
 
     opts = []
-    if type(longopts) == type(""):
+    if isinstance(longopts, str):
         longopts = [longopts]
     else:
         longopts = list(longopts)
diff --git a/Lib/idlelib/browser.py b/Lib/idlelib/browser.py
index 3c3a53a6599a7..4da2d4071ac19 100644
--- a/Lib/idlelib/browser.py
+++ b/Lib/idlelib/browser.py
@@ -43,7 +43,7 @@ def transform_children(child_dict, modname=None):
                 # If obj.name != key, it has already been suffixed.
                 supers = []
                 for sup in obj.super:
-                    if type(sup) is type(''):
+                    if isinstance(sup, str):
                         sname = sup
                     else:
                         sname = sup.name
diff --git a/Lib/lib2to3/pgen2/token.py b/Lib/lib2to3/pgen2/token.py
index 5f6612f5b3068..2a55138e48237 100755
--- a/Lib/lib2to3/pgen2/token.py
+++ b/Lib/lib2to3/pgen2/token.py
@@ -72,7 +72,7 @@
 
 tok_name = {}
 for _name, _value in list(globals().items()):
-    if type(_value) is type(0):
+    if isinstance(_value, int):
         tok_name[_value] = _name
 
 
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 4862355b2252c..d03c75dfab975 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -199,7 +199,7 @@ def handle_data(self, data):
 
     def add_object(self, value):
         if self.current_key is not None:
-            if not isinstance(self.stack[-1], type({})):
+            if not isinstance(self.stack[-1], dict):
                 raise ValueError("unexpected element at line %d" %
                                  self.parser.CurrentLineNumber)
             self.stack[-1][self.current_key] = value
@@ -208,7 +208,7 @@ def add_object(self, value):
             # this is the root object
             self.root = value
         else:
-            if not isinstance(self.stack[-1], type([])):
+            if not isinstance(self.stack[-1], list):
                 raise ValueError("unexpected element at line %d" %
                                  self.parser.CurrentLineNumber)
             self.stack[-1].append(value)
@@ -232,7 +232,7 @@ def end_dict(self):
         self.stack.pop()
 
     def end_key(self):
-        if self.current_key or not isinstance(self.stack[-1], type({})):
+        if self.current_key or not isinstance(self.stack[-1], dict):
             raise ValueError("unexpected key at line %d" %
                              self.parser.CurrentLineNumber)
         self.current_key = self.get_data()
diff --git a/Lib/pty.py b/Lib/pty.py
index 8d8ce40df541c..03073f07c92c0 100644
--- a/Lib/pty.py
+++ b/Lib/pty.py
@@ -162,7 +162,7 @@ def _copy(master_fd, master_read=_read, stdin_read=_read):
 
 def spawn(argv, master_read=_read, stdin_read=_read):
     """Create a spawned process."""
-    if type(argv) == type(''):
+    if isinstance(argv, str):
         argv = (argv,)
     sys.audit('pty.spawn', argv)
 
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 297ff967a2ce9..cec9ac89f1cc8 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -727,7 +727,7 @@ def formattree(self, tree, modname, parent=None):
         """Produce HTML for a class tree as given by inspect.getclasstree()."""
         result = ''
         for entry in tree:
-            if type(entry) is type(()):
+            if isinstance(entry, tuple):
                 c, bases = entry
                 result = result + '<dt class="heading-text">'
                 result = result + self.classlink(c, modname)
@@ -737,7 +737,7 @@ def formattree(self, tree, modname, parent=None):
                         parents.append(self.classlink(base, modname))
                     result = result + '(' + ', '.join(parents) + ')'
                 result = result + '\n</dt>'
-            elif type(entry) is type([]):
+            elif isinstance(entry, list):
                 result = result + '<dd>\n%s</dd>\n' % self.formattree(
                     entry, modname, c)
         return '<dl>\n%s</dl>\n' % result
@@ -1190,14 +1190,14 @@ def formattree(self, tree, modname, parent=None, prefix=''):
         """Render in text a class tree as returned by inspect.getclasstree()."""
         result = ''
         for entry in tree:
-            if type(entry) is type(()):
+            if isinstance(entry, tuple):
                 c, bases = entry
                 result = result + prefix + classname(c, modname)
                 if bases and bases != (parent,):
                     parents = (classname(c, modname) for c in bases)
                     result = result + '(%s)' % ', '.join(parents)
                 result = result + '\n'
-            elif type(entry) is type([]):
+            elif isinstance(entry, list):
                 result = result + self.formattree(
                     entry, modname, c, prefix + '    ')
         return result
@@ -2044,7 +2044,7 @@ def getline(self, prompt):
             return self.input.readline()
 
     def help(self, request):
-        if type(request) is type(''):
+        if isinstance(request, str):
             request = request.strip()
             if request == 'keywords': self.listkeywords()
             elif request == 'symbols': self.listsymbols()
@@ -2129,7 +2129,7 @@ def showtopic(self, topic, more_xrefs=''):
         if not target:
             self.output.write('no documentation found for %s\n' % repr(topic))
             return
-        if type(target) is type(''):
+        if isinstance(target, str):
             return self.showtopic(target, more_xrefs)
 
         label, xrefs = target
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 94c42f1582c02..c6caab959abd0 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -160,7 +160,7 @@ def _write_u32(file, x):
 class Au_read:
 
     def __init__(self, f):
-        if type(f) == type(''):
+        if isinstance(f, str):
             import builtins
             f = builtins.open(f, 'rb')
             self._opened = True
@@ -312,7 +312,7 @@ def close(self):
 class Au_write:
 
     def __init__(self, f):
-        if type(f) == type(''):
+        if isinstance(f, str):
             import builtins
             f = builtins.open(f, 'wb')
             self._opened = True
diff --git a/Lib/test/test_copyreg.py b/Lib/test/test_copyreg.py
index e3f1cd81aab20..e158c19db2d65 100644
--- a/Lib/test/test_copyreg.py
+++ b/Lib/test/test_copyreg.py
@@ -6,6 +6,9 @@
 class C:
     pass
 
+def pickle_C(c):
+    return C, ()
+
 
 class WithoutSlots(object):
     pass
@@ -32,16 +35,15 @@ class WithInherited(WithSingleString):
 class CopyRegTestCase(unittest.TestCase):
 
     def test_class(self):
-        self.assertRaises(TypeError, copyreg.pickle,
-                          C, None, None)
+        copyreg.pickle(C, pickle_C)
 
     def test_noncallable_reduce(self):
         self.assertRaises(TypeError, copyreg.pickle,
-                          type(1), "not a callable")
+                          C, "not a callable")
 
     def test_noncallable_constructor(self):
         self.assertRaises(TypeError, copyreg.pickle,
-                          type(1), int, "not a callable")
+                          C, pickle_C, "not a callable")
 
     def test_bool(self):
         import copy
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index afe0f7e9c7fd4..9a09d8a9e3fe0 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -426,7 +426,7 @@ def __init__(self_local, *a, **kw):
             def __getitem__(self, key):
                 return self.get(key, 0)
             def __setitem__(self_local, key, value):
-                self.assertIsInstance(key, type(0))
+                self.assertIsInstance(key, int)
                 dict.__setitem__(self_local, key, value)
             def setstate(self, state):
                 self.state = state
@@ -871,7 +871,7 @@ def setstate(self, state):
         self.assertEqual(a.getstate(), 10)
         class D(dict, C):
             def __init__(self):
-                type({}).__init__(self)
+                dict.__init__(self)
                 C.__init__(self)
         d = D()
         self.assertEqual(list(d.keys()), [])
@@ -3288,7 +3288,7 @@ class Int(int): __slots__ = []
         cant(True, int)
         cant(2, bool)
         o = object()
-        cant(o, type(1))
+        cant(o, int)
         cant(o, type(None))
         del o
         class G(object):
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index c7b9893943471..6ea7e7db2ce11 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -203,7 +203,7 @@ def test_knotted(self):
     def test_unreadable(self):
         # Not recursive but not readable anyway
         pp = pprint.PrettyPrinter()
-        for unreadable in type(3), pprint, pprint.isrecursive:
+        for unreadable in object(), int, pprint, pprint.isrecursive:
             # module-level convenience functions
             self.assertFalse(pprint.isrecursive(unreadable),
                              "expected not isrecursive for %r" % (unreadable,))
diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py
index fa85c7e6cd87d..30e843a423a77 100644
--- a/Lib/test/test_timeout.py
+++ b/Lib/test/test_timeout.py
@@ -50,10 +50,10 @@ def testFloatReturnValue(self):
     def testReturnType(self):
         # Test return type of gettimeout()
         self.sock.settimeout(1)
-        self.assertEqual(type(self.sock.gettimeout()), type(1.0))
+        self.assertIs(type(self.sock.gettimeout()), float)
 
         self.sock.settimeout(3.9)
-        self.assertEqual(type(self.sock.gettimeout()), type(1.0))
+        self.assertIs(type(self.sock.gettimeout()), float)
 
     def testTypeCheck(self):
         # Test type checking by settimeout()
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index a614cef6ab2f1..bef23f4505e03 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -850,9 +850,9 @@ def __init__(self, results):
 
     def __getitem__(self, i):
         item = self.results[i]
-        if type(item) == type({}):
+        if isinstance(item, dict):
             raise Fault(item['faultCode'], item['faultString'])
-        elif type(item) == type([]):
+        elif isinstance(item, list):
             return item[0]
         else:
             raise ValueError("unexpected type in multicall result")
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 91e2dd6191e5d..b5bffaff4ed0d 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -1351,7 +1351,7 @@ def buildPython():
         build_time_vars = l_dict['build_time_vars']
     vars = {}
     for k, v in build_time_vars.items():
-        if type(v) == type(''):
+        if isinstance(v, str):
             for p in (include_path, lib_path):
                 v = v.replace(' ' + p, '')
                 v = v.replace(p + ' ', '')
diff --git a/Tools/scripts/mailerdaemon.py b/Tools/scripts/mailerdaemon.py
index 635e5482e63c1..9595ee4a01533 100755
--- a/Tools/scripts/mailerdaemon.py
+++ b/Tools/scripts/mailerdaemon.py
@@ -70,7 +70,7 @@ def get_errors(self):
 # compile the re's in the list and store them in-place.
 for i in range(len(emparse_list_list)):
     x = emparse_list_list[i]
-    if type(x) is type(''):
+    if isinstance(x, str):
         x = re.compile(x, re.MULTILINE)
     else:
         xl = []
@@ -105,7 +105,7 @@ def emparse_list(fp, sub):
     emails = []
     reason = None
     for regexp in emparse_list_list:
-        if type(regexp) is type(()):
+        if isinstance(regexp, tuple):
             res = regexp[0].search(data, 0, from_index)
             if res is not None:
                 try:
@@ -134,7 +134,7 @@ def emparse_list(fp, sub):
         if reason[:15] == 'returned mail: ':
             reason = reason[15:]
         for regexp in emparse_list_reason:
-            if type(regexp) is type(''):
+            if isinstance(regexp, str):
                 for i in range(len(emails)-1,-1,-1):
                     email = emails[i]
                     exp = re.compile(re.escape(email).join(regexp.split('<>')), re.MULTILINE)



More information about the Python-checkins mailing list