[Python-checkins] bpo-39942:Fix failure in `TypeVar` when missing `__name__` (GH-19616)

HongWeipeng webhook-mailer at python.org
Mon Apr 20 16:02:01 EDT 2020


https://github.com/python/cpython/commit/a25a04fea5446b1712cde0cff556574be139285a
commit: a25a04fea5446b1712cde0cff556574be139285a
branch: master
author: HongWeipeng <hongweichen8888 at sina.com>
committer: GitHub <noreply at github.com>
date: 2020-04-20T21:01:53+01:00
summary:

bpo-39942:Fix failure in `TypeVar` when missing `__name__` (GH-19616)

https://bugs.python.org/issue39942

files:
A Misc/NEWS.d/next/Library/2020-04-20-20-16-02.bpo-39942.NvGnTc.rst
M Lib/test/test_typing.py
M Lib/typing.py

diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 489836c459b1c..b3a671732167e 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -221,6 +221,13 @@ def test_bound_errors(self):
         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)
diff --git a/Lib/typing.py b/Lib/typing.py
index df3650001e78e..9383fb8ff3a23 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -606,7 +606,10 @@ def __init__(self, name, *constraints, bound=None,
             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
index 0000000000000..3b83037d170f6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-04-20-20-16-02.bpo-39942.NvGnTc.rst
@@ -0,0 +1,2 @@
+Set "__main__" as the default module name when "__name__" is missing in
+:class:`typing.TypeVar`. Patch by Weipeng Hong.



More information about the Python-checkins mailing list