python环境argparse库在vsCode中使用Tips

SystemExit报错

==解决VScode中argparse配置问题。

原因:argparse库是用于接受从command-lines传来参数的库,但在VScode中并不需要从command-lines来配置参数。

解决:可以通过如下操作,实现在VScode中配置参数、调试带参数的python程序,参数设置方式如下:
Run->open Configurations,打开lanuch.json。
在这里插入图片描述

或者直接打开.vscode文件,点开launch.json,在args项添加参数;如果打开json文件后没有args,也可以自行创建。(配置好参数,一定要记得ctrl+s保存)
在这里插入图片描述
原始:
在这里插入图片描述

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "pwa-msedge",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://localhost:8080",
            "webRoot": "${workspaceFolder}"
        }
    ]
}

在lanuch.json中添加代码,后效果如下:

    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",  //改的
            "type": "python",	//改的
            "request": "launch",
            
            # Property console is not allowed. ?
            "program": "${file}",  //+的
            "console": "integratedTerminal", //+的
            "args":[	//+的
                "--cfg","cfg/yolo_hand/yolo_hand.cfg",
                "--data","cfg/yolo_hand/Test.data",
                "--weights","cfg/yolo_hand/yolo_hand_best.weights",
                "--batch-size","64",
                "-sr",
                "--s","0.001",
                "--prune","0"
            ]
        }
    ]

debug:the following arguments are required: action

最可能是使用方法有误:
检查1. launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "python",
            "request": "launch",
            "name": "Python: Current File",

            "program": "${file}",  //+"console": "integratedTerminal", //+"args":[	//+]
        }
    ]
}

检查2.代码定义
以官方用例进行说明:
我的命名是dbg_prog.py

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers)) 

检查3.调用方式(终端)
使用命令行调用这个简单的运算器:

xxx> python dbg_prog.py -h 
usage: dbg_prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
  N           an integer for the accumulator

optional arguments:
  -h, --help  show this help message and exit
  --sum       sum the integers (default: find the max)
xxx> python dbg_prog.py 4 1
4
xxx> python dbg_prog.py --sum 2 7 9
18
xxx> python dbg_prog.py --sum 2 7 4
13

argparse库使用说明

官方:https://docs.python.org/zh-cn/3/library/argparse.html
https://www.cnblogs.com/piperck/p/8446580.html

argparse库摘录

argparse是python标准库里面用来处理命令行参数的库

import argparse 首先导入模块

parser = argparse.ArgumentParser() 创建一个解析对象

parser.add_argument() 向该对象中添加你要关注的命令行参数和选项

return parser.parse_args() 进行解析

假设我们创建一个“argp.py”的文件:

import argparse     # 引入模块
# 建立解析对象
parser = argparse.ArgumentParser()

parser.add_argument("echo")         
# xx.add_argument("aa")
# 给xx实例增加一个aa属性

# 把parser中设置的所有"add_argument"给返回到args子类实例当中
# 那么parser中增加的属性内容都会在args实例中,使用即可。
args = parser.parse_args()
parser.parse_args()
print(arg.echo)     # 打印定位参数echo

运行的话,在python argp.py后面加上abcd(任意);

其将输出“abcd”。因为我们把abcd赋给了args.echo了。

给其设置help:
parser.add_argument("echo", help = "echo is here~")

在命令行中输入:
python argp.py -h
就可以得到相关的帮助信息。


type:

假设我们写一个文件,在命令行将其编译时,同时输入一个数字,返回一个平方:

因为parse.add_argument()对于接受的值默认其为str,如果要将之视为int类型,额外加一句“type=int”。

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("square", help = "To sqaure the number given", type = int)
# 在命令行中,该py文件希望用户能给他一个参数,最终将之转化为:args.square

args = parser.parse_args()
print(args.square**2)

可选参数:

add_argument前,给属性名之前加上'--',就能将之变为可选参数:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("--bool",help = "Whether to pirnt sth.")
# 这里的bool是一个可选参数,返回给args的是 args.bool
args = parser.parse_args()

if args.bool:
    print('bool = 1')

输入
python argp.py --bool 1
得到
bool = 1
既然是可选的,如果不指定(就是不使用它)的话,对应的变量会被设置为None。

对于简单程序,我们可能只需要两种值TrueorFalse
我们可以在原有的程序的基础上,在add_argument中多加一个参数:
action = "store_true"
这个时候,只要在命令行中加个bool,args.bool就是True了,无需再加上之后的赋值内容,加了反而会报错。
但是,如果在parser.add_argument(..., required=True,type=int)的话,那么这个参数就是必须的,因为他是required。


参数简写:

parser.add_argument("-b","--bool",action="store_true")

这样,在程序内部我们依旧使用args.bool,但是在命令行当中我们只需要多写一个“-b”就好了。


混合定位参数和可选参数:

当我们使用多个parser.add_argument(...)的时候,若将之视为可选参数,无则为None。

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-b","--bool",help="to show the ans in a sentencen form",action = "store_true")
parser.add_argument("square",type=int)

args = parser.parse_args() 

ans = args.square**2

if args.bool:
    print("the square of {} = {}".format(args.square,ans))
else:
    print(ans)
# 得到的效果为:
# 一旦输入“-b”然后再输入相关的参数,就可以得到我们需要的结果了,
# 不输入“-b”我们还是可以得到结果,只不过是另外一种方式而已。

进一步,我们可以进行以下操作,或者对之进行一些了解:

  • 限制输入的值:
    parser.add_argument("-b","--bool",choices=['0','1'],help="you can only input 0 or 1.")
    其中,choice可以限定我们能够输入的数。
  • 参数值和顺序:
    一般我们要把可选参数最后add,不可选参数放前面add。
    而在命令行里面输入代码时,程序会先赋值“先add的参数选项”。
    比如我先parser.add_argument(“a”,…)再b;
    输入命令行的时候:python xx.py x y,这个时候,args.a=x ; args.b=y。
  • count操作计数赋值:
    parser.add_argument("-b","--bool",action="count",type=int)
    这个时候,在命令后加上 -b ——> bool=1 ; -bb ——> bool=2 ;以此类推。
    但是这样的话,如果在程序里拿bool作为比较对象的时候,比如if bool > 0:,不写“-b”的时候会报错,原因是此时的bool是None,无法比较,要解决这个问题我们只需要加上一个 default 选项:parser.add_argument("-b","--bool",action="count",type=int,default=0)就好了。

参考链接:https://blog.csdn.net/belong_to_you/article/details/105225922
https://blog.csdn.net/xiaoxi___0818/article/details/113747116
https://zhuanlan.zhihu.com/p/181487445

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值