簡體   English   中英

Sys.argv python錯誤列表索引超出范圍

[英]Sys.argv python error list index out of range

我是stackoverflow的新用戶,除了我不是英國人,所以我很抱歉我的英語。

我在python中編程直到我弄錯了,因為我無法弄清楚出了什么問題......

#!/usr/bin/env python2.7

from random import choice
import sys

def help():
    print ("Please, you need to introduce a Int in this way: PWrand 10")

def PWrand(insert_by_user):
    chars = 'ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuwxyz0123456789!-_:.,;&)('

    for password in range(insert_by_user):
        sys.stdout.write(choice(chars))

 #Command Line

if __name__ == '__main__':

    if len(sys.argv) < 2 or len(sys.argv) > 2:
        help()

    elif (type(sys.argv[2]) != int):
        print("It need to be an Int!")

    else:
        insert_by_user = (sys.argv[2])
        print(PWrand(insert_by_user))

所以,這就是我所采取的。

Traceback (most recent call last):
  File "./passwordrandom.py", line 24, in <module>
    elif (type(sys.argv[2]) != int):
IndexError: list index out of range

謝謝你們!

你有兩個問題。 首先是你對列表索引有點困惑。 python中的列表是“零索引”,這意味着要獲取名為L的列表的第一個元素,您需要執行L[0] 同樣地,為了得到第二個,就像你需要的那樣,你做L[1]

另一個問題是sys.argv中的所有元素都是字符串,因此檢查類型將不起作用。 您應該嘗試將一段用戶輸入作為一個int放在try塊中並捕獲一個ValueError 它看起來像這樣:

if __name__ == '__main__':

    if len(sys.argv) < 2 or len(sys.argv) > 2:
        help()

    else:
        try:
            insert_by_user = int(sys.argv[1])
            print(PWrand(insert_by_user))
        except ValueError:
            print("It need to be an Int!")

except ValueError: block except ValueError:的代碼只有在用戶的輸入無法正確轉換為整數時才會執行。

這是因為第一個if捕獲每個包含少於2個元素的列表或者包含2個以上元素的所有列表,所以elif正在捕獲具有正好2個元素的所有內容,這些元素將存儲在位置0和1中。

if len(sys.argv) is not 2:
    help()

else:
   user_input = sys.argv[1].decode()
   if not user_input.isnumeric():
      print("It need to be an Int!")
   else:
       user_input = int(user_input)

應該解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM