[英]python sys.argv[1] vs. sys.argv[1:]
我写了这段代码:
#!/usr/bin/env python
import sys
if sys.argv[1] :
print sys.argv[1]
键入以下命令时,请在控制台中尝试以下操作:$ 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:]
您会看到我也将[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]
>> []
sys.argv是一个参数列表(您在终端中将其与命令一起传递),但是当您不传递任何参数并访问空列表的索引1时,则会出现明显的错误(IndexError)。 但是,在第二种情况下,您正在从索引1进行切片,并使用索引> 1的列表成员,即使该列表为空也应该没有问题,因为切片后的列表也将为空,而我们没有错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.