Skip to content

fix unittest.mock: make mock_open.__exit__ accept variable args#150535

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

fix unittest.mock: make mock_open.__exit__ accept variable args#150535
hahahuy wants to merge 1 commit 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.

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 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

The following commit authors need to sign the Contributor License Agreement:

CLA not signed

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.

1 participant