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

wer*_*oll 1 python python-2.7 python-3.x

我写了这段代码:

#!/usr/bin/env python
import sys

if sys.argv[1] :
    print sys.argv[1]
Run Code Online (Sandbox Code Playgroud)

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

回溯(最近调用最后一次):文件"py.py",第4行,如果是sys.argv [1]:IndexError:列表索引超出范围

现在进行一些更改:

#!/usr/bin/env python
import sys

if sys.argv[1:] :
    print sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*son 6

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

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

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

empty_list = []
print empty_list[:1]
>> []
Run Code Online (Sandbox Code Playgroud)