https://github.com/python/cpython/commit/85fa295073a0291e517ae6bd24a26e03b5925b75
commit: 85fa295073a0291e517ae6bd24a26e03b5925b75
branch: 3.14
author: Zang Peiyu <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-06-21T19:39:36+03:00
summary:
[3.14] gh-150484: Fix mock_open __exit__ with contextlib.ExitStack (GH-151829)
mock_open's _exit_side_effect had a fixed 3-arg signature, but
contextlib.ExitStack calls __exit__ with 4 args (self + 3 exc info).
Use *args to accept any number of arguments.
files:
A Misc/NEWS.d/next/Library/2026-05-28-00-00-00.gh-issue-150484.XxYyZz.rst
M Lib/test/test_unittest/testmock/testmock.py
M Lib/unittest/mock.py
diff --git a/Lib/test/test_unittest/testmock/testmock.py
b/Lib/test/test_unittest/testmock/testmock.py
index 764585ec5d54688..ef69f060886d0a4 100644
--- a/Lib/test/test_unittest/testmock/testmock.py
+++ b/Lib/test/test_unittest/testmock/testmock.py
@@ -2108,6 +2108,15 @@ def test_mock_open_after_eof(self):
self.assertEqual([], h.readlines())
self.assertEqual([], h.readlines())
+ def test_mock_open_exit_with_contextlib_exit_stack(self):
+ # gh-150484: mock_open's __exit__ should work when called from
+ # contextlib.ExitStack, which passes (exctype, excinst, exctb).
+ from contextlib import ExitStack
+ with mock.patch('builtins.open', mock.mock_open()) as m:
+ with ExitStack() as exit_stack:
+ with exit_stack.enter_context(open('/tmp/test.txt', 'w')):
+ pass
+
def test_mock_parents(self):
for Klass in Mock, MagicMock:
m = Klass()
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 5a8fccf59dcb6e4..f940235a6e50dcb 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -3010,7 +3010,7 @@ def _next_side_effect():
return handle.readline.return_value
return next(_state[0])
- def _exit_side_effect(exctype, excinst, exctb):
+ def _exit_side_effect(*args):
handle.close()
global file_spec
diff --git
a/Misc/NEWS.d/next/Library/2026-05-28-00-00-00.gh-issue-150484.XxYyZz.rst
b/Misc/NEWS.d/next/Library/2026-05-28-00-00-00.gh-issue-150484.XxYyZz.rst
new file mode 100644
index 000000000000000..522c70058ed29d7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-05-28-00-00-00.gh-issue-150484.XxYyZz.rst
@@ -0,0 +1 @@
+Fix :func:`unittest.mock.mock_open` ``__exit__`` raising ``TypeError`` when
used with :class:`contextlib.ExitStack`.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]