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

python sys.argv[1]与sys.argv[1:],python,python-2.7,python-3.x,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行,在 if sys.argv[1]:索引器:列表索引超出范围 现在有一些变化: #!/usr/bin/env python import sys if sys.arg

我写了这段代码:

#!/usr/bin/env python
import sys

if sys.argv[1] :
    print sys.argv[1]
键入时在控制台中尝试以下操作: $python py.py xxx 上面印着xxx 如果不带任何参数,则会出现错误:

回溯(最后一次调用):文件“py.py”,第4行,在 if sys.argv[1]:索引器:列表索引超出范围

现在有一些变化:

#!/usr/bin/env python
import sys

if sys.argv[1:] :
    print sys.argv[1:]
您可以看到,我也将[1]更改为[1:],现在如果我在控制台中键入“$python py.py”,并且忘记了不返回错误的参数。
幕后发生了什么?

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

使用第二块代码,您正在执行一个任务,检查索引1和forward中的列表切片是否为空,然后打印该列表切片。 之所以这样做,是因为如果您有一个空列表,并且像这样对它执行切片,切片将返回一个空列表

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

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

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

使用第二块代码,您正在执行一个任务,检查索引1和forward中的列表切片是否为空,然后打印该列表切片。 之所以这样做,是因为如果您有一个空列表,并且像这样对它执行切片,切片将返回一个空列表

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的列表成员,则即使列表为空,也不会出现问题,因为切片列表也将为空,并且我们不会得到错误。

sys.argv是一个参数列表(您在终端中随命令一起传入)但是当您不传递任何参数并访问空列表的索引1时,它会给出一个明显的错误(IndexError)。
但是,在第二种情况下,如果您从索引1进行切片,并使用索引大于1的列表成员,那么即使列表为空,也不会出现问题,因为切片列表也将为空,并且我们不会得到错误。

在if语句
if len(sys.argv)>1:
@Vahidabdi我认为
if sys.argv[1:]:
非常好,之后,您可以确保
sys.argv[1]
存在并且可以使用。在if语句
if len(sys.argv)>1:
@Vahidabdi中使用len函数,我认为
if sys.argv[1::::
非常好,之后,您可以确保
sys.argv[1]
存在并且可以使用。