我正在编写一个接受int
和str
类型参数的click命令,我需要找出函数中传递的参数类型,如下例所示: / p>
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'>
答案 0 :(得分:1)
单击或甚至使用sys.argv
的位置参数将始终为str类型这是您传递给命令行的内容,字符串。 < / p>
您需要做的是解析输入并将其转换为字符串或调整代码,如下所示:
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()
这使用isnumeric()来检查传递的str是否是数字,例如U&#34; 123&#34;
&#34;方法isnumeric()检查字符串是否仅包含数字字符。此方法仅存在于unicode对象上。&#34;
你也可以这样做:
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 :(得分:0)
ask for forgiveness not permission通常认为它更像Pythonic。
try:
int(num)
click.echo("integer")
except ValueError:
click.echo("string")
这将通过尝试转换为int
块中的try
来实现。如果字符串可以转换为int
,则它必须是int
,否则为字符串。