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]

Reply via email to