Skip to content

Commit 1909fd5

Browse files
committed
Handle strange exceptions raised on attempting to access __set_name__
1 parent f2a57b2 commit 1909fd5

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Lib/test/test_typing.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7577,6 +7577,22 @@ class NamedTupleClass(NamedTuple):
75777577
normal_exception.__notes__[0].replace("NormalClass", "NamedTupleClass")
75787578
)
75797579

7580+
def test_exception_raised_if_accessing_set_name_causes_strange_error(self):
7581+
class Meta(type):
7582+
def __getattribute__(self, attr):
7583+
if attr == "__set_name__":
7584+
raise TypeError("NO")
7585+
7586+
class VeryAnnoying(metaclass=Meta): pass
7587+
7588+
# Sanity check to make sure the test is setup correctly:
7589+
with self.assertRaises(TypeError):
7590+
VeryAnnoying.__set_name__
7591+
7592+
# The real test here is just that this class creation succeeds:
7593+
class Foo(NamedTuple):
7594+
attr = VeryAnnoying()
7595+
75807596

75817597
class TypedDictTests(BaseTestCase):
75827598
def test_basics_functional_syntax(self):

Lib/typing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2734,7 +2734,7 @@ def __new__(cls, typename, bases, ns):
27342734
setattr(nm_tpl, key, val)
27352735
try:
27362736
set_name = type(val).__set_name__
2737-
except AttributeError:
2737+
except Exception:
27382738
pass
27392739
else:
27402740
try:

0 commit comments

Comments
 (0)