簡體   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