我正在编写一个click命令,它接受int和str类型的参数,我需要在函数中找出传递的参数类型,如本例所示:
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。
$ python script.py text
<type 'unicode'>
$ python script.py 123
<type 'unicode'>我正在寻找一种使执行此命令返回以下内容的方法:
$ python script.py text
<type 'str'>
$ python script.py 123
<type 'int'>发布于 2017-10-07 23:58:42
单击或甚至使用sys.argv中的位置参数总是str类型,因为这是传递给命令行( string__ )的内容。
您需要做的是解析输入并将其转换为字符串,或者调整代码,如下所示:
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对象上。”
你也可以这样做:
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
发布于 2017-10-08 03:16:24
它通常被认为是比ask for forgiveness not permission更Pythonic的。
try:
int(num)
click.echo("integer")
except ValueError:
click.echo("string")这将在这里实现,方法是尝试在int块中转换为try。如果可以将字符串转换为int,则该字符串必须是int,否则为字符串。
https://stackoverflow.com/questions/46626204
复制相似问题