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/报错

2 chatgpt

注意一下问题场景,我最开始没有发现前面还有问题require那个地方,就只盯着args = pp.parse_args()那一句,有点傻;

相关推荐
诚信定制8391 小时前
Typora插件开发指南:打造专属IDE式写作环境
ide
大圣编程1 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang1 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆2 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜3 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞4 小时前
异步HttpModule的实现方式
java·服务器·前端
Tian_Hang4 小时前
Eclipse Ditto 物模型相关代码
java·运维·服务器·ide·eureka·eclipse
丹宇码农6 小时前
把 HLS 字幕玩出花:zwPlayer 如何让 M3U8 视频支持全文搜索、翻译与码率自适应
前端·javascript·音视频·hls·视频播放器
2501_943782357 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统