在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]一致了;
再加上default='nuswide',这是一个好习惯,特别是在Jupyter中;
下面是解决方案:
args = pp.parse_known_args()[0]
args, _ = pp.parse_known_args()
在VScode命令行下输入:jupyter notebook,会打印出几个网址,把网址复制到浏览器上即可!
To access the notebook, open this file in a browser:
file:web1
Or copy and paste one of these URLs:
web2
or web3
web1-web3指会出现3个网址;
[1] 无需修改代码,解决ipykernel_launcher.py: error: unrecognized arguments: -f /home/报错
[2] chatgpt
注意一下问题场景,我最开始没有发现前面还有问题require那个地方,就只盯着args = pp.parse_args()那一句,有点傻;