簡體   English   中英

如何在 Python 中檢查傳遞的 CLI 參數類型/單擊

[英]How to check the passed CLI argument type in Python / Click

我正在編寫一個 click 命令,它接受intstr類型的參數,我需要找出函數中傳遞的參數類型,如本例所示:

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

click 甚至使用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()

這使用 isnumeric() 來檢查傳遞的 str 是否為數字,例如 u"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()

更多信息: python中isinstance()和type()的區別

通常認為請求寬恕而不是許可更像是 Pythonic。

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

這將通過嘗試在try塊中轉換為int來實現。 如果字符串可以轉換為int ,則它必須是int ,否則為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM