繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM