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"并忘记返回没有错误的参数.什么事发生在幕后?
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)