我是 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/