]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39942:Fix failure in `TypeVar` when missing `__name__` (GH-19616)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 20 Apr 2020 20:24:35 +0000 (13:24 -0700)
committerGitHub <noreply@github.com>
Mon, 20 Apr 2020 20:24:35 +0000 (13:24 -0700)
https://bugs.python.org/issue39942
(cherry picked from commit a25a04fea5446b1712cde0cff556574be139285a)

Co-authored-by: HongWeipeng <hongweichen8888@sina.com>
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2020-04-20-20-16-02.bpo-39942.NvGnTc.rst [new file with mode: 0644]

index ded5a8b39db3eeda770fc11451462752b9b7fd08..bdd7acd85914c15c93cca32459b8f0b1afb8ec08 100644 (file)
@@ -220,6 +220,13 @@ class TypeVarTests(BaseTestCase):
         with self.assertRaises(TypeError):
             TypeVar('X', str, float, bound=Employee)
 
+    def test_missing__name__(self):
+        # See bpo-39942
+        code = ("import typing\n"
+                "T = typing.TypeVar('T')\n"
+                )
+        exec(code, {})
+
     def test_no_bivariant(self):
         with self.assertRaises(ValueError):
             TypeVar('T', covariant=True, contravariant=True)
index 7aab8db06567087a3862585c02773475a9697703..f4fb08f4500de4b07af3f1e48abad8f823518922 100644 (file)
@@ -600,7 +600,10 @@ class TypeVar(_Final, _Immutable, _root=True):
             self.__bound__ = _type_check(bound, "Bound must be a type.")
         else:
             self.__bound__ = None
-        def_mod = sys._getframe(1).f_globals['__name__']  # for pickling
+        try:
+            def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')  # for pickling
+        except (AttributeError, ValueError):
+            def_mod = None
         if def_mod != 'typing':
             self.__module__ = def_mod
 
diff --git a/Misc/NEWS.d/next/Library/2020-04-20-20-16-02.bpo-39942.NvGnTc.rst b/Misc/NEWS.d/next/Library/2020-04-20-20-16-02.bpo-39942.NvGnTc.rst
new file mode 100644 (file)
index 0000000..3b83037
--- /dev/null
@@ -0,0 +1,2 @@
+Set "__main__" as the default module name when "__name__" is missing in
+:class:`typing.TypeVar`. Patch by Weipeng Hong.