[3.13] gh-127190: Fix local_setattro() error handling (GH-127366) (#127367)

gh-127190: Fix local_setattro() error handling (GH-127366)

Don't make the assumption that the 'name' argument is a string. Use
repr() to format the 'name' argument instead.
(cherry picked from commit 20657fbdb1)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot) 2024-12-01 07:48:04 +01:00 committed by GitHub
parent a442c87c4c
commit 5017c81824
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 1 deletions

View file

@ -208,6 +208,21 @@ class BaseLocalTest:
_testcapi.join_temporary_c_thread()
@support.cpython_only
def test_error(self):
class Loop(self._local):
attr = 1
# Trick the "if name == '__dict__':" test of __setattr__()
# to always be true
class NameCompareTrue:
def __eq__(self, other):
return True
loop = Loop()
with self.assertRaisesRegex(AttributeError, 'Loop.*read-only'):
loop.__setattr__(NameCompareTrue(), 2)
class ThreadLocalTest(unittest.TestCase, BaseLocalTest):
_local = _thread._local