![](/img/trans.png)
[英]Python: how to check if an argument's type is such that it will be passed by value or by reference?
[英]How to check the passed CLI argument type in Python / Click
我正在編寫一個 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'>
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()
。
通常認為請求寬恕而不是許可更像是 Pythonic。
try:
int(num)
click.echo("integer")
except ValueError:
click.echo("string")
這將通過嘗試在try
塊中轉換為int
來實現。 如果字符串可以轉換為int
,則它必須是int
,否則為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.