GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-92248: Deprecate `type`, `choices`, `metavar` parameters of `argparse.BooleanOptionalAction` by sobolevn · Pull Request #103678 · python/cpython

Conversation

@sobolevn

@sobolevn sobolevn commented Apr 22, 2023 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

argparse.BooleanOptionalAction was added in 3.9
#85039 removed just a single wrong parameter.
But, it was on time when 3.9 was recently released, and no deprecation warning was issued.
The parameter was just removed.

But, since we already have 3.9, 3.10, and 3.11, (and all alphas of 3.12), I am sure that we need a deprecation period now.

People might use this (the use-case is probably wrong), but I don't like breaking things for no clear benefit.

I'm feeling pretty safe about this deprecation (I even considered just removing these parameters straight away), because code search shows that no one is using these arguments: https://cs.github.com/?q=action%3DBooleanOptionalAction

Plus, they don't make any sense and are mostly not changing any behaviour of BooleanOptionalAction.

CC @barneygale since you've asked for this 😆
CC @rhettinger and @hauntsaninja since you've reviewed #85039

  • Issue: argparse.BooleanOptionalAction accepts and silently discards choices, metavar, and type arguments #92248

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@sobolevn
pythongh-92248: Deprecate type, chocies, metavar parameters of …
5524230
…`argparse.BooleanOptionalAction`
@sobolevn
sobolevn requested a review from barneygale April 22, 2023 09:41
@bedevere-bot bedevere-bot mentioned this pull request Apr 22, 2023
argparse.BooleanOptionalAction accepts and silently discards choices, metavar, and type arguments #92248
Closed
@bedevere-bot bedevere-bot added the awaiting review label Apr 22, 2023
@sobolevn
sobolevn requested review from hauntsaninja and rhettinger April 22, 2023 09:41
Eclips4
Eclips4 reviewed Apr 22, 2023
View reviewed changes
Comment thread Misc/NEWS.d/next/Library/2023-04-22-12-30-10.gh-issue-92248.NcVTKR.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

@sobolevn @Eclips4
Update Misc/NEWS.d/next/Library/2023-04-22-12-30-10.gh-issue-92248.Nc…
5df2d40
…VTKR.rst

Co-authored-by: Kirill <[email protected]>
@rhettinger

rhettinger commented Apr 24, 2023

Copy link
Copy Markdown
Contributor

This would gradually nudge the code toward the way it should have been designed from the outset. Eventually, it might save someone a few minutes of time.

That said, this is a pretty minor issue (ignoring unused arguments). Changing the behavior will be inconvenient for people who happened to have fed in an unused argument in code that is currently functioning correctly — we've breaking code that was sloppy but correct — I'm not sure they will appreciate being forced to make a minor edit that doesn't change behavior or fix any problem that they have.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@arhadthedev
Merge branch 'main' into issue-92248
e32aa16
@sobolevn

sobolevn commented Apr 29, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member Author

@rhettinger thank you for your input. However, I don't quite agree with some of your points.

Changing the behavior will be inconvenient for people who happened to have fed in an unused argument in code that is currently functioning correctly

Two things here:

  1. Changing the behavior will be inconvenient: Yes, it can cause a new warning. But, this is pretty easy to deal with: just remove the argument. It won't require any compat code or migration plan. I think that this is a good thing, because it helps to indicate a problem with your code. And, of course, people with the correct code won't have any warnings at all
  2. currently functioning correctly: I don't think that we can call this code "correct". Here's the first example:
>>> from argparse import *
>>> parser = ArgumentParser()
>>> parser.add_argument('--foo', action=BooleanOptionalAction, type=int)  # we expect `int`
>>> parser.parse_args(['--foo'])  # but get `bool`
Namespace(foo=True)

Here's the code does not "function correctly" in a sense that type is ignored. While user explicitly asks to use int.

The second example:

>>> from argparse import *
>>> parser = ArgumentParser()
>>> parser.add_argument('--foo', action=BooleanOptionalAction, choices=['on', 'off'])
>>> parser.parse_args(['--foo'])
Namespace(foo=True)

And again: user specifies two values that must be respected. But, they are ignored.

We also do not document this behaviour:
Снимок экрана 2023-04-29 в 12 59 28

So, any user might expect it to work similarly to other action types. Which is not the case right now.

All in all, I see this as an improvement:

  1. We show what's wrong and do not break any code
  2. In the future we will have the correct signature that does the correct thing
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@hugovk hugovk changed the title gh-92248: Deprecate type, chocies, metavar parameters of argparse.BooleanOptionalAction gh-92248: Deprecate type, choices, metavar parameters of argparse.BooleanOptionalAction May 1, 2023
hugovk
hugovk reviewed May 1, 2023
View reviewed changes
Comment thread Doc/whatsnew/3.12.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Doc/whatsnew/3.12.rst Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/argparse.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

sobolevn and others added 2 commits May 1, 2023 10:48
@sobolevn @hugovk
Apply suggestions from code review
808826b
Co-authored-by: Hugo van Kemenade <[email protected]>
@hugovk
Merge branch 'main' into issue-92248
f95263f
hugovk
hugovk approved these changes May 8, 2023
View reviewed changes
@bedevere-bot bedevere-bot added awaiting merge and removed awaiting review labels May 8, 2023
@hugovk

hugovk commented May 18, 2023

Copy link
Copy Markdown
Member

Let's merge this before the beta if there's no remaining objections.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@hugovk
Merge branch 'main' into issue-92248
6ab98ac
@hugovk
hugovk enabled auto-merge (squash) May 19, 2023 15:28
@hugovk
hugovk merged commit 27a7d5e into python:main May 19, 2023
@bedevere-bot bedevere-bot removed the awaiting merge label May 19, 2023
carljm added a commit to gsallam/cpython_with_perfmap_apii that referenced this pull request May 20, 2023
@carljm
Merge branch 'main' into gsallam/main
ea5965a
* main: (30 commits)
  pythongh-103987: fix several crashes in mmap module (python#103990)
  docs: fix wrong indentation causing rendering error in dis page (python#104661)
  pythongh-94906: Support multiple steps in math.nextafter (python#103881)
  pythongh-104472: Skip `test_subprocess.ProcessTestCase.test_empty_env` if ASAN is enabled (python#104667)
  pythongh-103839: Allow building Tkinter against Tcl 8.7 without external libtommath (pythonGH-103842)
  pythongh-85984: New additions and improvements to the tty library. (python#101832)
  pythongh-104659: Consolidate python examples in enum documentation (python#104665)
  pythongh-92248: Deprecate `type`, `choices`, `metavar` parameters of `argparse.BooleanOptionalAction` (python#103678)
  pythongh-104645: fix error handling in marshal tests (python#104646)
  pythongh-104600: Make type.__type_params__ writable (python#104634)
  pythongh-104602: Add additional test for listcomp with lambda (python#104639)
  pythongh-104640: Disallow walrus in comprehension within type scopes (python#104641)
  pythongh-103921: Rename "type" header in argparse docs (python#104654)
  Improve readability of `typing._ProtocolMeta.__instancecheck__` (python#104649)
  pythongh-96522: Fix deadlock in pty.spawn (python#96639)
  pythonGH-102818: Do not call `PyTraceBack_Here` in sys.settrace trampoline.  (pythonGH-104579)
  pythonGH-103545: Add macOS specific constants for ``os.setpriority`` to ``os`` (python#104606)
  pythongh-104623: Update macOS installer to SQLite 3.42.0 (pythonGH-104624)
  pythongh-104619: never leak comprehension locals to outer locals() (python#104637)
  pythongh-104602: ensure all cellvars are known up front (python#104603)
  ...
@DanCardin DanCardin mentioned this pull request Sep 23, 2023
Argparse: certain action types dont accept metavar, but should? #109792
Closed
@actualben

actualben commented Feb 3, 2026

Copy link
Copy Markdown

Hi from the future (post 2025 Q4 when the params were removed). For the record, there was a reason those parameters were accepted in the first place and that reason seems totally unexamined here. Also the codesearch described missed the mark quite a bit (for example, as of 3-Feb-2026):

  • https://github.com/search?type=code&q=action%3DBooleanOptionalAction - 1.3k files
  • vs https://github.com/search?type=code&q=action%3Dargparse.BooleanOptionalAction - 14.6k files

And this change is documented in the wrong place -- people don't instantiate argparse.BooleanOptionalAction directly (which is proven in the docs for that class: https://docs.python.org/3.14/library/argparse.html#argparse.BooleanOptionalAction), instead they call add_argument with the action param set accordingly, but https://docs.python.org/3.14/library/argparse.html#choices shows nothing about choices=None (for example) suddenly being a fatal error. You might want to do something like action=BooleanOptionalAction, choices=var_that_evaluates_to_none when you're calling add_argument dynamically. There are workarounds of course, but this breakage seems unforced - when we could have just warned about questionable code without changing the API:

if type is not None:
  warnings._whatever("type is implied when action is BooleanOptionalAction")
if choices is not None:
  warnings._whatever("choices are predefined with BooleanOptionalAction")
if metavar is not None:
  warnings._whatever("there is no metavar when action is BooleanOptionalAction")
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@coderabbitai coderabbitai Bot mentioned this pull request Aug 10, 2026
feat: allow to disable the memory array fudge snakemake/snakemake-executor-plugin-slurm#482
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@Eclips4 Eclips4 Eclips4 left review comments
@hugovk hugovk hugovk approved these changes
@barneygale barneygale Awaiting requested review from barneygale
@rhettinger rhettinger Awaiting requested review from rhettinger
@hauntsaninja hauntsaninja Awaiting requested review from hauntsaninja

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

7 participants

@sobolevn @rhettinger @hugovk @actualben @Eclips4 @bedevere-bot @arhadthedev
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.