argparse 如何实现两个参数必须互斥(mutually exclusive)
技术百科
冰川箭仙
发布时间:2026-01-22
浏览: 次 在argparse中实现参数互斥最标准的方式是使用互斥组:调用add_mutually_exclusive_group()创建组,再用其add_argument()添加参数;默认允许都不提供但禁止同时提供,设required=True可强制二选一。
在 argparse 中,实现两个参数互斥(即不能同时出现)最标准的方式是使用 互斥组(mutually exclusive group) —— 通过 add_mutually_exclusive_group() 创建,再向其中添加参数。
创建互斥组并添加参数
调用 parser.add_mutually_exclusive_group() 得到一个组对象,然后用该组的 add_argument() 方法添加参数。这样,argparse 会在解析时自动检查是否有多于一个被指定,若违反则报错退出。
- 默认行为:至少一个可选(即允许都不提供),但不允许同时提供
- 如需强制二选一,可设
required=True(注意:仅对互斥组生效,不是单个参数)
基础示例:--verbose 和 --quiet 互斥
常见日志级别控制场景:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose'
, action='store_true', help='启用详细输出')
group.add_argument('--quiet', action='store_true', help='启用静默模式')
args = parser.parse_args()
✅ 允许:python script.py --verbose 或 python script.py --quiet 或 python script.py
❌ 禁止:python script.py --verbose --quiet → 报错:argument --quiet: not allowed with argument --verbose
强制二选一(require one of them)
只需在创建互斥组时传入 required=True:
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--input-file', type=str, help='输入文件路径')
group.add_argument('--stdin', action='store_true', help='从标准输入读取')
此时必须显式指定其中一个,否则报错:one of the arguments --input-file --stdin is required
注意事项与常见问题
- 互斥组只对
add_argument()调用有效;不能对已添加到 parser 的参数“事后”加入互斥关系 - 不支持跨组互斥(比如两个不同互斥组里的参数之间不会自动检查)
- 短选项(如
-v/-q)同样适用,只要加在同一互斥组里 - 如果参数有
nargs='*'或nargs='+',互斥逻辑仍按“是否被提供”判断,而非内容是否重叠
# 会在
# 可选
# 常见问题
# python
# 只需
# 都不
# 其中一个
# 不支持
# 再用
# input
# 对象
# 报错
# require
# red
# 组里
# 互斥
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- php怎么下载安装后设置错误日志_phpini l
- Windows服务无法启动错误1067是什么_进程
- win11如何清理传递优化文件 Win11为C盘瘦
- 一文教你快速开通网站LOGO图
- Windows10电脑怎么设置虚拟光驱_Win10
- c++怎么使用std::filesystem遍历文
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- Python与GPU加速技术_CUDA与Numba
- Win11怎么解压RAR文件 Win11自带解压功
- Win11怎么设置组合键快捷方式_Windows1
- 获取 PHP 文件最后修改时间的正确方法
- c++怎么操作redis数据库_c++ hired
- Win11怎么忘记WiFi网络_Win11删除已保
- 如何在Golang中实现RPC异步返回_Golan
- Win10怎样安装PPT模板_Win10安装PPT
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- 如何使用Golang实现负载均衡_分发请求到多个服
- Python与OpenAI接口集成实战_生成式AI
- Linux如何安装JDK11_Linux环境变量配
- Win11如何设置计划任务 Win11定时执行程序
- PythonFastAPI项目实战教程_API接口
- 如何在Golang中写入XML文件_生成符合规范的
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么把图标拖到任务栏_Win11固定应用
- 如何在Golang中实现服务熔断与限流_Golan
- Win11怎么关闭自动更新 Win11永久关闭系统
- Win11输入法选字框不见了怎么办_Win11输入
- 如何用::实现工具类方法调用_php静态工具类设计
- Python数据抓取合法性_合规说明【指导】
- c++ try_emplace用法_c++ map
- 如何使用Golang实现函数指针_函数变量与回调示
- 如何在Golang中指定模块版本_使用go.mod
- Python实现图数据库操作_Neo4j核心CRU
- Python字符串处理进阶_切片方法解析【指导】
- Win11怎么设置默认图片查看器_Windows1
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- 如何在 VS Code 中正确配置并使用 NumP
- Windows怎样拦截QQ浏览器广告_Window
- Win11如何设置系统语言_Win11系统语言切换
- php本地部署支持nodejs吗_php与node
- 如何使用Golang log设置日志输出格式_Go
- Drupal 中渲染节点时出现 HTML 标签嵌套
- php485在php5.6下能用吗_php485旧
- Windows11怎样开启游戏模式_Windows
- mac怎么打开终端_MAC终端Terminal使用
- php8.4如何配置ssl证书_php8.4htt
- c++如何实现一个高性能的环形队列(Ring Bu
- Win11怎么设置任务栏大小_Windows11注
- Win11应用商店下载慢怎么办 Win11更改DN
- Win11怎样彻底卸载自带应用_Win11彻底卸载


QQ客服