首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查Python / Click中传递的CLI参数类型

如何检查Python / Click中传递的CLI参数类型
EN

Stack Overflow用户
提问于 2017-10-07 23:48:19
回答 2查看 2.1K关注 0票数 1

我正在编写一个click命令,它接受intstr类型的参数,我需要在函数中找出传递的参数类型,如本例所示:

代码语言:javascript
复制
import click

@click.command()
@click.argument('num')
def command(num):
    if type(num) is int:
        click.echo("integer")
    elif type(num) is str:
        click.echo("string")

if __name__ == '__main__':
    command()

这个例子不起作用,因为参数类型总是unicode。

代码语言:javascript
复制
$ python script.py text
<type 'unicode'>
$ python script.py 123
<type 'unicode'>

我正在寻找一种使执行此命令返回以下内容的方法:

代码语言:javascript
复制
$ python script.py text
<type 'str'>
$ python script.py 123
<type 'int'>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-07 23:58:42

单击或甚至使用sys.argv中的位置参数总是str类型,因为这是传递给命令行( string__ )的内容。

您需要做的是解析输入并将其转换为字符串,或者调整代码,如下所示:

代码语言:javascript
复制
import click

@click.command()
@click.argument('num')
def command(num):
    if num.isnumeric():
        click.echo("integer")
    else:  # Will always be a str no need to check for type.
        click.echo("string")

if __name__ == '__main__':
    command()

它使用is ()来检查所传递的str是否为数字,例如u"123“。

“方法是数值(),检查字符串是否仅由数字字符组成。此方法仅存在于unicode对象上。”

你也可以这样做:

代码语言:javascript
复制
import click

@click.command()
@click.argument('num')
def command(num):
    if num.isnumeric():
        num = int(num)
    if isinstance(num, int):
        click.echo("integer")
    else:       
        click.echo("string")

if __name__ == '__main__':
    command()

但是,这是完全多余的,除非您打算稍后使用num,并且需要它的int类型。

最后,您应该使用isinstance(num, int)而不是type()

更多信息在这里:Differences between isinstance() and type() in python

票数 1
EN

Stack Overflow用户

发布于 2017-10-08 03:16:24

它通常被认为是比ask for forgiveness not permission更Pythonic的。

代码语言:javascript
复制
try:
    int(num)
    click.echo("integer")
except ValueError:
    click.echo("string")

这将在这里实现,方法是尝试在int块中转换为try。如果可以将字符串转换为int,则该字符串必须是int,否则为字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46626204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档