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

news/2024/7/16 8:16:47 标签: jupyter, 前端, ide

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


http://www.niftyadmin.cn/n/5113961.html

相关文章

划片机:半导体芯片是如何封装的?

半导体芯片的封装是指将芯片内部的电路通过引脚、导线、焊盘等连接起来,并保护芯片免受外部环境的影响,同时满足外部电路的连接需求。以下是半导体芯片封装的常见步骤: 1. 减薄:将晶圆研磨减薄,以便于后续的划片操作。…

02.MySQL函数及约束、多表笔记

函数 函数是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 MySQL中内置了很多字符串函数,常用的几个如下: 函数功能CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,.Sn拼接成一个字符串LOWER(str)将字符串str全部转为小写UPPER(str)将…

vue3传递prop踩坑

这是官方文档中的介绍: Vue3中文官网 我们在组件中定义props时推荐使用驼峰命名,但是在父组件中传递数据时要使用kebab-case形式 这是我写的loading组件中定义的几个porps 我在使用时是这样传入的 但是打印出来的值是: 可以看到这里的ou…

Idea index过程时间长

在setting里搜index,在tools->shared indexes的设置里改成使用本地index

c++ 线程安全的单例模式-1

一、什么是线程安全 在拥有共享数据的多条数据并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。 二、如何保证线程安全 法1、给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用; 法2、让线…

使用java mail SMTPTransport发送邮箱,本地秒到,一上服务器就20-30s左右,生产环境直接发送失败。

一、代码 pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--pom.xml添加javax.mail的引用&#xff0c;或者项目引入…

基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上&#xff0c;没有感知到异常或中断 3.2、Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …

controlleradvice和handlerinterceptor

这里写自定义目录标题 介绍InitBinder和preHandle使用场景 介绍 controlleradvice和handlerinterceptor都是Spring框架中的组件,其首次出现的Spring版本如下: ControllerAdvice ControllerAdvice注解是在Spring 3.2 中作为ExceptionHandler、InitBinder 和ModelAttribute的组…