python sys.argv [1]与sys.argv [1:]

时间:2013-12-02 08:22:34

标签: python python-2.7 python-3.x

我写了这段代码:

#!/usr/bin/env python
import sys

if sys.argv[1] :
    print sys.argv[1]

键入时在控制台中尝试: $ python py.py xxx 打印xxx 当我离开时没有参数时会出现错误:

  

回溯(最近一次呼叫最后一次):文件" py.py",第4行,in       if sys.argv [1]:IndexError:列表索引超出范围

现在进行一些更改:

#!/usr/bin/env python
import sys

if sys.argv[1:] :
    print sys.argv[1:]

你看我也改变了[1]到[1:],如果我输入" $ python py.py"在控制台中忘记返回无错误的参数。 什么事发生在幕后?

2 个答案:

答案 0 :(得分:6)

sys.argv是一个参数列表。 因此,当您执行没有任何参数的脚本时,您访问索引1的列表为空,访问空列表的索引将引发IndexError

使用第二个代码块,您正在执行list slice,并且您正在检查索引1和转发的列表切片是否为空,然后打印列表中的那个切片。 为什么这样做是因为如果你有一个空列表并像这样对它做一个切片,那么切片会返回一个空列表。

last_list = [1,2,3]
if last_list[1:]:
    print last_list[1:]
>> [2,3]

empty_list = []
print empty_list[:1]
>> []

答案 1 :(得分:0)

sys.argv是一个参数列表(你在终端中传递了你的命令)但是当你没有传递任何参数并访问空列表的索引1时,它会给出一个明显的错误(IndexError)。 但是,在第二种情况下,你正在从索引1切片并使用索引> 1的列表成员,即使列表为空也应该没有问题,因为切片列表也将是空的,我们得到没错。