【Python】执行python脚本命令,向argparse传参时出现 error: unrecognized arguments: True 错误

2023-05-16

错误

在使用python脚本命令,向argparse传递参数时,报了下面的错误:

error: ununrecognized arguments: True

脚本命令及argparse代码如下(为了方便解释,做了简化,只保留了发生错误的部分):

argparse代码:

parser.add_argument('--resume', action='store_true', default=False, help='continue to train the model')

命令:

python train.py --resume True

解决方式

先给出这个错误的解决方法,其实很简单,直接去掉True即可

python train.py --resume

这个时候在python代码中解析到的参数resume的值也是True:

args = parser.parse_args()
print(args.resume)  # True

拓展:argparse中action的用法

下面介绍问题出现的原因及原理:

在argparse的add_argument函数中,包含很多参数,如:

  • default:参数的默认值
  • type:参数类型
  • help:参数说明
    等等

上面add_argument语句中,指定该函数的一个参数action,表示关键字(resume)的默认状态,这个默认状态有两种:store_truestore_false

  • 如果action为store_true,则在命令行中不指定参数resume时,其值为False
  • 如果action为store_false,则在命令行中不指定参数resume时,其值为True

用两个例子表示:

parser.add_argument('--resume', action='store_true')
# 如果命令行语句为: python train.py -resume  -> 此时resume 为True
# 如果命令行语句为: python train.py          -> 此时resume 为False
parser.add_argument('--resume', action='store_false')
# 如果命令行语句为: python train.py -resume  -> 此时resume 为False
# 如果命令行语句为: python train.py          -> 此时resume 为True

可以理解为,只有在命令行中,指定该参数,才会触发action,action中储存了true或false,在触发action之后,将储存的值赋值给resume,否则赋值action中储存的值的取反。

如果将action与default结合:

parser.add_argument('--resume', action='store_true', default='false')  # 与不加default一样
# 如果命令行语句为: python train.py -resume  -> 此时resume 为True
# 如果命令行语句为: python train.py          -> 此时resume 为False
parser.add_argument('--resume', action='store_true', default='true')  # 结果永远为True
# 如果命令行语句为: python train.py -resume  -> 此时resume 为True
# 如果命令行语句为: python train.py          -> 此时resume 为True

可以理解为,在触发action时,会按照触发时的结果赋值,但如果没有触发action,default的优先级将大于action中存储值的取反,按照default的值赋值

拓展:另外一种传参方式

除了使用action,也可以直接传bool类型的值,直接在add_argument指定参数类型为bool即可

parser.add_argument("--resume", type=bool, default=True)

在命令行中就需要显示的指定resume是True还是False

python train.py --resume True

在获取参数的时候与获取str或int类型相同,直接使用 args.resume 就可以获取参数的值

目前新版本的argparse应该支持bool类型,在网上看到之前有人使用时,不支持bool类型,在参数解析时,resume解析到的值为字符类型的 “True”,如果出现这个问题的话可以升级argparse,或者对解析到的值进行强制转换:

bool(args.resume)

参考

https://docs.python.org/zh-cn/3/howto/argparse.html
https://wenku.baidu.com/view/5b4c94fbcd2f0066f5335a8102d276a200296020.html
https://blog.csdn.net/zeronose/article/details/122276418
https://blog.csdn.net/qq_35140742/article/details/120607823

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

【Python】执行python脚本命令,向argparse传参时出现 error: unrecognized arguments: True 错误 的相关文章

  • Python包不安装子模块

    我在 dev 分支中创建了一个具有以下结构的包 在验证包安装正确之前不会合并到 main mypackage init py setup py requirements txt module py subpackage one init p
  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 使用字母而不是数字进行顺序计数[重复]

    这个问题在这里已经有答案了 我需要一种方法 将字符串 递增 到 z 然后将 aa 递增到 az 然后将 ba 递增到 bz 依此类推 就像 Excel 工作表中的列一样 我将向该方法提供前一个字符串 它应该增加到下一个字母 PSEUDO C
  • 在 keras 中使用自定义张量流操作

    我在张量流中有一个脚本 其中包含自定义张量流操作 我想将代码移植到 keras 但我不确定如何在 keras 代码中调用自定义操作 我想在 keras 中使用tensorflow 所以到目前为止我发现的教程描述了与我想要的相反的内容 htt
  • Selenium Webdriver - Python - leboncoin - pb 选择带重音的按钮

    我正在尝试在以下网站上自动填写表格 https www leboncoin fr https www leboncoin fr 我用 Selenium IDE 录制了一个脚本 我有一个通过单击 Se 连接器 按钮并填写我的密码和用户名来自动
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • 如何使用 msgpack 进行读写?

    如何序列化 反序列化字典data with msgpack http msgpack org The Python 文档 http msgpack python readthedocs io en latest badge latest似乎
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 使用python中的mysql连接器正确从mysql数据库获取blob

    当执行以下代码时 import mysql connector connection mysql connector connect connection params here cursor connection cursor curso
  • 如何在 Python 中执行相当于预处理器指令的操作?

    有没有办法在 Python 中执行以下预处理器指令 if DEBUG lt do some code gt else lt do some other code gt endif There s debug 这是编译器预处理的特殊值 if
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 向量化 numpy bincount

    我有一个 2d numpy 数组 A我要申请np bincount 到矩阵的每一列A生成另一个二维数组B由原始矩阵每列的 bincounts 组成A 我的问题是 np bincount 是一个采用一维数组的函数 它不是像这样的数组方法B A
  • 网页抓取 - 如何识别网页上的主要内容

    给定一个新闻文章网页 来自任何主要新闻来源 例如时报或彭博社 我想识别该页面上的主要文章内容 并丢弃其他杂项元素 例如广告 菜单 侧边栏 用户评论 在大多数主要新闻网站上都可以使用的通用方法是什么 有哪些好的数据挖掘工具或库 最好是基于Py
  • 测试中的模型 - Django 1.7 问题

    我正在尝试将我的项目移植为使用 Django 1 7 除了一件事之外 一切都很好 测试文件夹内的模型 Django 1 7 新迁移在内部运行 migrate 命令 在运行syncdb之前 这意味着如果模型未包含在迁移中 它将不会填充到数据库
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns

随机推荐