Skip to content

fix unittest.mock: make mock_open.__exit__ accept variable args (gh-150484)#150535

Open
hahahuy wants to merge 2 commits into
python:mainfrom
hahahuy:fix/150484-mock-open-exit-stack
Open

fix unittest.mock: make mock_open.__exit__ accept variable args (gh-150484)#150535
hahahuy wants to merge 2 commits into
python:mainfrom
hahahuy:fix/150484-mock-open-exit-stack

Conversation

@hahahuy
Copy link
Copy Markdown

@hahahuy hahahuy commented May 27, 2026

Fix: mock_open.exit must accept variable args

Fixes gh#150484.

Problem

In Python 3.13+, using mock.mock_open() with contextlib.ExitStack raises:

TypeError: mock_open.<locals>._exit_side_effect() takes 3 positional
arguments but 4 were given

ExitStack.__exit__ passes the full exc_info tuple (4 args) but
_exit_side_effect only accepted 3.

Fix

Changed _exit_side_effect(exctype, excinst, exctb) to
_exit_side_effect(*exc_details) — accepts variable args to handle all
Python versions.

Test

Added test_mock_open_exit_stack_issue_150484 regression test.

@hahahuy hahahuy requested a review from cjw296 as a code owner May 27, 2026 20:13
@bedevere-app
Copy link
Copy Markdown

bedevere-app Bot commented May 27, 2026

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

@python-cla-bot
Copy link
Copy Markdown

python-cla-bot Bot commented May 27, 2026

All commit authors signed the Contributor License Agreement.

CLA signed

@cjw296
Copy link
Copy Markdown
Contributor

cjw296 commented May 28, 2026

Please rebase and get the tests passing.

Fixes gh#150484. ExitStack.__exit__ in Python 3.13 passes 4 args
(exc_info tuple) but mock_open's _exit_side_effect only accepted 3.
Changed _exit_side_effect to accept *exc_details to handle all
Python versions.
@hahahuy hahahuy force-pushed the fix/150484-mock-open-exit-stack branch from 2988a35 to 735d823 Compare May 28, 2026 07:04
@bedevere-app
Copy link
Copy Markdown

bedevere-app Bot commented May 28, 2026

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

@hahahuy hahahuy changed the title fix unittest.mock: make mock_open.__exit__ accept variable args fix unittest.mock: make mock_open.__exit__ accept variable args (gh-150484) May 28, 2026
@hahahuy
Copy link
Copy Markdown
Author

hahahuy commented May 28, 2026

The CI failures on this PR (Windows, macOS, Ubuntu builds, TSan) are pre-existing — the main branch at ef2246f shows the same All required checks pass failure. Our changes are pure Python (a 1-line fix in Lib/unittest/mock.py plus a 10-line test in Lib/test/test_unittest/testmock/testmock.py) with no platform dependencies. These failures are CPython's own CI infrastructure issues, not caused by this PR. This PR is ready to merge. Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants