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()`那一句,有点傻;

相关推荐
Danny_FD2 分钟前
前端BFC详解:从基础到深入的全面解读
前端
临枫38811 分钟前
网页图像优化:现代格式与响应式技巧
前端
咪库咪库咪22 分钟前
构建交互网站
前端
周星星日记23 分钟前
10.vue3中组件实现原理(上)
前端·vue.js·面试
小华同学ai24 分钟前
6.4K star!轻松搞定专业领域大模型推理,这个知识增强框架绝了!
前端·github
专业抄代码选手27 分钟前
【VUE】在vue中,Watcher与Dep的关系
前端·面试
Lazy_zheng30 分钟前
从 DOM 监听到 Canvas 绘制:一套完整的水印实现方案
前端·javascript·面试
尘寰ya32 分钟前
前端面试-微前端
前端·面试·职场和发展
蘑菇头爱平底锅33 分钟前
数字孪生-DTS-孪创城市-前端实现动态地铁分布线路图
前端·javascript·数据可视化
祯民38 分钟前
AI 时代前端进阶:10分钟入门基于 HuggingFace Transformers 库开源模型私有化部署
前端·aigc