2017-10-07 81 views
1

我正在編寫一個接受intstr類型參數的單擊命令,我需要找出函數中傳遞的參數類型,如本例中所示:如何在Python中檢查傳入的CLI參數類型

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'> 

回答

1

在點擊位置參數,甚至使用sys.argv永遠是STR型作爲這是你傳遞什麼到命令行,一個字符串

你需要做的是分析的輸入,並將其轉換爲字符串或適應你的代碼如下所示:

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是數字,例如ü「123」

「方法isnumeric()檢查字符串是否只包含數字字符,該方法僅存在於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

+0

我認爲第一個例子很好地完成了這個工作,將使用num作爲整數來執行投射 – MMSs

+1

更新了我的答案。使用isinstance()而不是type()。 – alexisdevarennes

0

一般認爲更Python來ask for forgiveness not permission

try: 
    int(num) 
    click.echo("integer") 
except ValueError: 
    click.echo("string") 

這將在這裏試圖通過轉換爲inttry塊來實現。如果字符串可以轉換爲int,那麼它必須是int,否則爲字符串。

相關問題