【发布时间】:2017-12-06 09:10:45
【问题描述】:
我是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
谢谢大家!
【问题讨论】:
-
列表元素的编号从0开始,那么对于有两个元素的列表,元素的编号是多少?
-
哦...我以为它是从 '2' 开始的,因为它是你知道的第二个参数吗?比如,第一个是 python 名称,第二个是参数。现在我明白了,虽然我发现了另一个问题,但我无法像 int 那样阅读它
-
如果一个list有两个item,第一个是item 0,第二个是item 1。没有item 2,试图访问一个是错误的。
-
它不是一个 int,而是一个字符串。使用
insert_by_user = int(sys.argv[1])当然,如果它不是 int 的字符串表示形式,例如 "b",请准备好捕获该 ValueError 异常。 -
令新程序员感到困惑的是在序列上使用长度,例如
len(sys.arg)在您的测试中将返回 2,以及像sys.argv[2]这样的序列上的索引,它将为您提供#3 项。从零开始的索引有一些很好的理由,但大多数情况下它会引起混乱。此外,在您的问题中,您应该展示如何使用您的 args 调用 python 脚本,以明确您使用 2 个 args 进行测试。
标签: python list range argv sys