Python argparse:组合“choices”、“nargs”和“default”时类型不一致

2023-11-23

我有以下 python 程序:

#!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('arg', choices=['foo', 'bar', 'baz'], default='foo', nargs='*')

args = parser.parse_args()

print(args)

如果我像这样调用程序:

./prog.py

输出是

Namespace(arg='foo')

但是如果我用以下命令调用该程序foo作为一个论点:

./prog.py foo

输出是

Namespace(arg=['foo'])

Question

我怎样才能得到arg的默认值变为list?

我试过了

我尝试过设置default=['foo']但这会导致:

prog.py: error: argument arg: invalid choice: ['foo'] (choose from 'foo', 'bar', 'baz')

这是一个旧的但开放的错误/问题的重复

http://bugs.python.org/issue9625 (argparse: Problem with defaults for variable nargs when using choices)

A positional with *得到一些特殊处理。它的默认值总是通过choices测试您是否不提供值。

将其与以下情况进行比较optional

In [138]: p=argparse.ArgumentParser()
In [139]: a=p.add_argument('--arg',choices=['foo','bar','baz'],nargs='*')

In [140]: p.parse_args([])
Out[140]: Namespace(arg=None)
In [141]: a.default=['foo']
In [142]: p.parse_args([])
Out[142]: Namespace(arg=['foo'])

无需测试即可接受默认值:

In [143]: a.default=['xxx']
In [144]: p.parse_args([])
Out[144]: Namespace(arg=['xxx'])

相关代码是:

def _get_values(self, action, arg_strings):
    ...
    # when nargs='*' on a positional, if there were no command-line
    # args, use the default if it is anything other than None
    elif (not arg_strings and action.nargs == ZERO_OR_MORE and
          not action.option_strings):
        if action.default is not None:
            value = action.default
        else:
            value = arg_strings
        self._check_value(action, value)

提议的错误/问题补丁对此代码块进行了一些小更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python argparse:组合“choices”、“nargs”和“default”时类型不一致 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • 多个日期范围重叠比较:如何有效地进行?

    要检查两个不同日期范围内的重叠 Start1 End1 and Start2 End2 我正在查 if Start1 lt End2 End1 gt Start2 overlap exists 问题是 如果我有五个日期范围 比较重叠的好方法
  • strcpy 当目标缓冲区小于 src 缓冲区时

    我试图了解 strcpy 和 strncpy 的区别 缺点 有人可以帮忙吗 void main char src this is a long string char dest 5 strcpy dest src printf s n de
  • 如何在Oracle动态SQL中转义“:”并且还具有绑定变量?

    我正在尝试将以下内容设为动态 SQL 但是 角色搞砸了 alter session set events sql trace sql asasasaass Example declare l trc cmd varchar2 500 l s
  • 时间表的数据库架构

    有人可以帮助我为时间表应用程序提供一个粗略的数据库架构吗 为不同的项目存储一段时间 2 周 内每天的小时数 前任 A 可以在同一天为项目 A 投入 3 小时 为项目 B 投入 4 小时 使其能够轻松获取项目总投入时间的报告 或者获取某个人所
  • VS2010静态链接问题

    我公司最近从VS2005升级到VS2010 我们有一个巨大的项目 其中使用了许多静态链接到 exe 中的模块 但是VS2010中的链接似乎存在一些问题 为了解释我们的问题 我们构建了一个最小的示例项目 其组成如下图所示 有一个应用程序使用库
  • GetHostEntry() 不再解析地址

    我最近从 NET v3 5 切换到 v4 0 Client Profile 第一次运行 GetHostEntry 时遇到问题 tcpClient SocketInfo SourceName remoteMatcher Host 88 255
  • Android 使地图上的蓝点消失或移除 v2

    我正在尝试替换我的应用程序地图上的蓝点 我的目的是显示一个图标形状的平面 而不是通常的蓝点 我实现了这一点并且它完美地工作如下 GoogleMap OnMyLocationChangeListener myLocationChangeLis
  • 子组件中的 ExpressionChangedAfterItHasBeenCheckedError

    我有一个父组件 它每秒更新一次其数组myValue 在子组件中 我想创建一个图表 该图表使用该数组作为数据 并在每次父组件更新时更新 当我运行此应用程序时 我收到此错误 错误 ExpressionChangedAfterItHasBeenC
  • 如果接口定义了 ReadOnly 属性,那么实现者如何为该属性提供 Setter?

    对于接口的实现者来说 有没有一种方法可以让ReadOnly定义属性使其成为完整的读 写Property 想象一下我定义一个接口来提供ReadOnly Property 即 只是给定值的吸气剂 Interface SomeInterface
  • 简单的 getColumnName(0) 调用会抛出无效的列索引:getValidColumnIndex

    我正在尝试编写一个 JTable 它从 ResultSet 获取数据 并使用它创建一个动态大小的表 其中包含来自 ResultSet 的适当列名称和行数据值 但我无法让 JDBC 动态获取列名称 我知道我的 select 语句很好 我可以使
  • 使用视觉状态管理器设置前景时出现问题

    我有一个 WPF 应用程序 我正在尝试使用 Net v4 视觉状态管理器设置 TextBox 的样式 具体来说 我尝试设置 MouseOver 状态的前景和背景的颜色 正在发生的情况是 虽然背景和边框发生了完美的变化 但前景却没有 如果我使
  • 循环声音 flash as3 的首选方法

    我在 Flash AS3 中循环播放声音时遇到一些问题 因为当我告诉声音循环时 我在音频的结尾 开始处出现轻微的延迟 音频剪辑正确 并且可以在车库乐队上无间隙地播放 我知道 Flash 中普遍存在声音问题 编码错误以及 SOUND COMP
  • 如何将文件发送到浏览器进行下载?

    当客户端请求文件时 我使用以下代码发送它 public static Result download String file File file getRealFile file return Ok file 但我发现浏览器不会下载它 而是
  • 如何知道使用了什么 JAXB 实现?

    我使用 MOXy 作为 JAXB 实现 但不知何故我想在某些管理屏幕上 动态 显示实现名称 例如 Moxy 和版本号 我如何从 JAXB 检索该信息 Cheers 您可以执行类似以下操作来找出正在使用的 JAXB impl import j
  • 对回形针中的视频/图像使用单个附件

    我正在使用回形针上传文件 视频和图像 视频和图像使用相同的附件 源 class Media lt ActiveRecord Base belongs to memory validates attachment presence sourc
  • 分析 wav 并绘制图表

    我正在尝试从 wav 文件中打印出波形 但我有点不知道我应该采取多长的样本 this is what I would love to archieve without the colors 因此 为了读取我的数据 我使用以下代码 first
  • 使用 new 初始化 C# 数组与使用文字初始化

    简单的简短问题 到底有什么区别 int intarray new int 2 1 2 and int intarray2 4 5 6 就像 新 到底做什么 你真的需要它吗 我猜它只是分配内存 或者什么 抱歉 我对 C 完全陌生 在学习过程中
  • Django 空字段后备

    我有一个保存用户地址的模型 这个模型必须有first name and last name字段 因为人们想为收件人设置地址 例如他的公司等 我想要实现的是 If the first name last name地址中的字段已填写 仅返回该字
  • Python - 等待变量更改

    我有一个 Python 脚本 可以打开 Twitter API 的 websocket 然后等待 当事件通过 amq 传递给脚本时 我需要打开一个新的 websocket 连接并立即地新连接注册后立即关闭旧连接 它看起来像这样 stream
  • Python argparse:组合“choices”、“nargs”和“default”时类型不一致

    我有以下 python 程序 usr bin env python import argparse parser argparse ArgumentParser parser add argument arg choices foo bar