python 报错 invalid value 2_python--click

这个是flask作者开发的一个第三方模块,用于创建命令行,作用类似于argparse,但是使用起来更方便。

import click

‘‘‘

步骤:

1.使用@click.command()装饰一个函数,使其成为命令行接口

2.再使用@click.option()装饰,为其添加一些命令行选项

注意是

@click.command()

@click.option("--name")

def foo()

不是

@click.option("--name")

@click.command()

def foo()

@click.command()要写在上面

‘‘‘

@click.command()

@click.option("--name", default="satori", help="我是来自东方地灵殿的古明地觉")

def hello(name):

print(name)

‘‘‘

在终端中,执行python 1.py --name=koishi

输出结果:koishi

可是我们并没有再hello函数中传参啊,其实当我们执行hello()执行的不是hello,而是将hello装饰之后的函数

显然,我们在option中指定的--name,会自动传给hello里的参数name。

注意这里一定要匹配,指定了几个option,就要写几个参数

@click.command()

@click.option("--name")

@click.option("--age")

def hello(name):

pass

如果这样的话,会报错TypeError: hello() missing 1 required positional argument: ‘age‘。

因为我们hello明明接收的是两个,却只有一个option,所以会缺少参数

@click.command()

@click.option("--name")

@click.option("--age")

def hello(name):

pass

如果这样的话,会报错TypeError: hello() got an unexpected keyword argument ‘age‘

因为我们hello明明只需要接收一个name参数,但是却指定了两个option

我们直接执行,python 1.py

输出结果:satori,也就是说如果我们不指定,那么会指定为default的值。如果也没写default,那么为None

‘‘‘

if __name__ == ‘__main__‘:

hello()

关于option里的help参数,click也做了许多人性化的设计

20181118205545721602.png

import click

@click.command()

@click.option("--age", type=int, required=True)

def hello(age):

print(age)

‘‘‘

这里的type表示类型,如果输入的内容不合法,那么会报错

python 1.py --age=xx

Error: Invalid value for "--age": xx is not a valid integer

python 1.py --age=12

12

这里的required,表示参数是否必填,如果为True,不填报错。而False,不填为None

python 1.py

Error: Missing option "--age".

‘‘‘

if __name__ == ‘__main__‘:

hello()

import click

@click.command()

@click.option("--name", prompt="name不可以为空哦")

def hello(name):

print(name)

‘‘‘

如果没有指定prompt,那么输入python 1.py

会直接返回None

但是一旦我们指定了prompt,就不能为空了,但也不报错,而是一直提示你。

当我输入python 1.py,回车

name不可以为空哦:

name不可以为空哦:

name不可以为空哦:

name不可以为空哦:

name不可以为空哦: 古明地觉

古明地觉

‘‘‘

if __name__ == ‘__main__‘:

hello()

import click

@click.command()

@click.option("--name", nargs=2)

def hello(name):

print(name)

‘‘‘

nargs:表示命令行要接收几个参数

输入python 1.py --name=a b

得到(‘a‘, ‘b‘)

输入python 1.py --name=a b c

得到Error: Got unexpected extra argument (c)

输入python 1.py --name=a

得到Error: --name option requires 2 arguments

‘‘‘

if __name__ == ‘__main__‘:

hello()

import click

@click.command()

@click.option("--name", type=click.Choice(["mashiro", "satori", "koishi"]))

def hello(name):

print(name)

‘‘‘

这样输入的内容,只能是"mashiro", "satori", "koishi"三者之一

python 1.py mmmmm

得到Error: Invalid value for "--name": invalid choice: mmmmm. (choose from mashiro, satori, koishi)

‘‘‘

if __name__ == ‘__main__‘:

hello()

20181118205545851485.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值