2017-08-16 56 views
4

我有一個問題,用下面的代碼:獲取用戶輸入並保存到最多三個變量

cmd, arg, arg1 = input("> ").split(" ") 

我想要得到的投入這三個瓦爾。 但是如果我離開argarg1空,Python的抱怨:

沒有足夠的數值解壓縮(預計3,拿到1)

我怎樣才能避免這種情況?

我想使argarg1可選。

回答

7

如果大小不同,則無法解壓變量。好吧,不是這樣的。

您可以使用extended iterable unpacking(又稱星拆包)(Python的3只):

cmd, *args = input("> ").split(" ") 
現在如果你只輸入一個命令

args是空的,否則它解壓您所輸入的參數列入清單。

if not args: 
    # there are no arguments 
    pass 
elif len(args)>2: 
    print("too many args") 
else: 
    print("args",args) 

請注意,你會發現split(" ")有限。我會做split()(沒有參數:組空白,以避免空參數),或處理與shlex.split(input("> "))

注意:與python 2,你必須拆分和測試長度。較不優雅,但會奏效。

+0

如果你開始這似乎是混亂的,但它是一個很好的答案。 – Chris

+0

謝謝。由於OP知道拆包,這只是前進一步:) –

+1

對於備忘錄,上面的答案是引用[PEP 3132:擴展Iterable拆包](https://www.python.org/dev/peps/pep-3132/)。在我看來這很酷。 @克里斯,我不認爲它是混亂。這是我開始學習Python(2.7)時嘗試的第一件事情之一,因爲它是「明顯」的,像這樣可以工作,但事實並非如此。 –

2

您可以獲取輸入字符串之後單獨設置的變量:

inp=input("> ").split(" ") 
l = len(inp) 
if l >= 1: 
    cmd = inp[0] 
if l >= 2: 
    arg1 = inp[1] 
if l >= 3: 
    arg2 = inp[2] 
相關問題