Jupyter中使用parse报错[args = pp.parse_args()]

在Jupyter Notebook中使用parse报错了,

复制代码
pp = argparse.ArgumentParser(description='')
pp.add_argument('--dataset', type=str, choices=['pascal', 'coco', 'nuswide', 'cub'], required=True)
pp.add_argument('--num-pos', type=int, default=1, required=False, help='number of positive labels per image')
pp.add_argument('--num-neg', type=int, default=0, required=False, help='number of negative labels per image')
pp.add_argument('--seed', type=int, default=1200, required=False, help='random seed')
args = pp.parse_args()

报错信息如下:

复制代码
usage: ipykernel_launcher.py [-h] --dataset {pascal,coco,nuswide,cub}
                             [--num-pos NUM_POS] [--num-neg NUM_NEG]
                             [--seed SEED]
ipykernel_launcher.py: error: the following arguments are required: --dataset
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2

问题不小,很头痛;
pp.add_argument('--dataset', type=str, choices=['pascal', 'coco', 'nuswide', 'cub'], required=True)

修改为:
pp.add_argument('--dataset', type=str, default='nuswide',choices=['pascal', 'coco', 'nuswide', 'cub'], required=False)

把后面的required=True,改为False,问题出在这,True代表一定要传入参数;

本来在Jupyter Notebook调用parser.parse_args()就有问题,但是在一般IDE运行.py文件时是不会出错的,修改为required=False之后,问题场景就和参考[1]一致了;

  • 为什么只在Jupyter Notebook 里面出错:
    这是因为调用parser.parse_args()会读取系统参数:sys.argv[],命令行调用时是正确参数,而在jupyter notebook中调用时,sys.argv的值为ipykrnel_launcher.py;
    说人话,一般IDE会有让你输入参数的地方,Jupyter直接读取系统参数,不给你机会输入参数;

再加上default='nuswide',这是一个好习惯,特别是在Jupyter中;

下面是解决方案:

把不需要的参数去掉

method 1

args = pp.parse_known_args()[0]

method 2

args, _ = pp.parse_known_args()

参考

1\] [无需修改代码,解决ipykernel_launcher.py: error: unrecognized arguments: -f /home/报错](http://t.csdnimg.cn/FLTBd) \[2\] chatgpt 注意一下问题场景,我最开始没有发现前面还有问题`require`那个地方,就只盯着`args = pp.parse_args()`那一句,有点傻;

相关推荐
SuperEugene3 分钟前
NPM Script 实战:常用命令设计与封装|Vue 工程化篇
前端·javascript·vue.js·前端框架·npm
前端进阶之旅7 分钟前
React 18 并发特性实战指南:提升大型应用性能的关键技术
前端·react.js·前端框架
恋猫de小郭9 分钟前
Android 性能迎来提升:内核引入 AutoFDO 普惠所有 15-16 设备
android·前端·flutter
小霍同学12 分钟前
Vue 动态表单(Dynamic Form)
前端·vue.js
Dragon Wu17 分钟前
Taro 小程序开发注意事项(不定期记录更新)
前端·javascript·小程序·typescript·taro
wangfpp19 分钟前
多端统一你真的会了吗?
前端·javascript·架构
小霍同学19 分钟前
Vue 动态组件(Dynamic Components)
前端·vue.js
代码煮茶27 分钟前
Vue3 组件封装实战 | 从 0 封装一个可复用的表格组件(附插槽 / Props 设计)
前端·vue.js
兜兜风29 分钟前
从零部署 OpenClaw:打造你的第二大脑
前端·后端
Maimai1080829 分钟前
Next.js 16 缓存策略详解:从旧模型到 Cache Components
开发语言·前端·javascript·react.js·缓存·前端框架·reactjs