python - Sys.argv python错误列表索引超出范围

标签 python list range argv sys

我是 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 中的所有元素都将是字符串,因此检查类型将不起作用。您应该尝试将用户输入片段转换为 try block 内的 int 并捕获 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 内的代码。

关于python - Sys.argv python错误列表索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664687/

相关文章:

python - Django-Rest-Framework 关系和超链接 API 问题

python - 无法在 python 中导入 gdal?

string - 自定义数据类型的显示列表实例

list - 在 Erlang 中,如何从给定 id 值的记录列表中返回整个记录?

python - 如何获得两个双元素子列表列表之间的对称差异?

python - 将所有组合存储在列表中时如何避免内存错误

Python:为什么我得到不同的排序结果

如果范围在范围列表内,则返回 TRUE/FALSE R

node.js - 从 rados_clone_range 返回的 -95 错误代码的含义是什么?

excel - 清除单元格内容