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”时类型不一致 的相关文章

  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • 酸洗过程是确定性的吗?

    对于特定的输入值 Pickle 是否总是产生相同的输出 我想当腌制具有相同内容但不同插入 删除历史记录的字典时可能会出现问题 我的目标是使用 Pickle 和 SHA1 创建函数参数的 签名 以实现 memoize 我想当腌制具有相同内容但
  • 在 NetworkX 中使边缘更粗

    student id 0 1 2 3 4 5 6 7 8 9 10 11 12 0 131X1319 1 14 6 16 1 10 8 15 15 17 15 18 16 1 13212YX3 1 1 4 8 11 9 14 7 0 3 0
  • 使用 ElementTree 时出现未定义实体错误

    我有一组 XML 文件 需要读取它们并将其格式化为单个 CSV 文件 为了读取 XML 文件 我使用了提到的解决方案here https stackoverflow com questions 5530857 parse xml file
  • 如何将数组列表转换为 Spark 数据帧

    假设我有一个列表 x 1 10 2 14 3 17 我想转换x具有两列的 Spark 数据框id 1 2 3 和value 10 14 17 我怎么能这么做呢 Thanks x 1 10 2 14 3 17 df sc paralleliz
  • 使用 Flask 和 SQLAlchemy 在 Celery 任务中未更新数据库

    我正在使用 Flask 和 SQLAlchemy 编写 Web 应用程序 我的程序需要在后台处理一些内容 然后将这些内容标记为在数据库中已处理 使用标准 Flask Celery 示例 http flask pocoo org docs 0
  • 跨行对 Pandas 数据框进行分组 - 2.0

    进一步这个问题跨行对 Pandas 数据框进行分组 https stackoverflow com questions 46995997 grouping pandas dataframe across rows 操作是 amount cl
  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C

随机推荐

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

    要检查两个不同日期范围内的重叠 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