2017-08-16 59 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] 
相关问题