我跑
import sys
print "x \tx^3\tx^3+x^3\t(x+1)^3\tcube+cube=cube+1"
for i in range(sys.argv[2]): // mistake here
cube=i*i*i
cube2=cube+cube
cube3=(i+1)*(i+1)*(i+1)
truth=(cube2==cube3)
print i, "\t", cube, "\t", cube + cube, "\t", cube3, "\t", truth
我得到了
Traceback (most recent call last):
File "cube.py", line 5, in <module>
for i in range(sys.argv[2]):
IndexError: list index out of range
如何在代码中使用命令行参数?
使用示例
python cube.py 100
应该给出
x x^3 x^3+x^3 (x+1)^3 cube+cube=cube+1
0 0 0 1 False
1 1 2 8 False
2 8 16 27 False
--- cut ---
97 912673 1825346 941192 False
98 941192 1882384 970299 False
99 970299 1940598 1000000 False
答案 0 :(得分:6)
使用:
sys.argv[1]
还要注意,参数总是字符串,而range
需要一个整数。
所以正确的代码是:
for i in range(int(sys.argv[1])):
答案 1 :(得分:3)
您希望int(sys.argv[1])
不是2。
理想情况下,如果用户没有提供正确的参数,首先要检查sys.argv的长度并打印一条有用的错误消息。
修改:请参阅http://www.faqs.org/docs/diveintopython/kgp_commandline.html
答案 2 :(得分:2)
以下是有关如何经常解决此类问题自己的一些提示:
阅读错误消息告诉您的内容:“列出索引超出范围”。
什么清单?两个选项(1)范围(2)sys.argv
返回的列表在这种情况下,它不能是(1);这是不可能的
for i in range(some_integer)
...但你可能不知道,所以一般来说,如果一行中有多个选择错误的来源,而你无法看出原因是什么,那么将该行分成两行或更多陈述:
num_things = sys.argv[2]
for i in range(num_things):
再次运行代码。
现在我们知道sys.argv是列表。什么指数?必须是2.为什么超出范围?基于知识的答案:因为Python从0开始计算列表索引。基于实验的答案:在失败的行之前插入此行:
print list(enumerate(sys.argv))
因此您需要将[2]更改为[1]。然后你会得到另一个错误,因为在range(n)中n必须是一个整数,而不是一个字符串......你可以用类似的方式解决这个新问题 - 额外提示:查找范围()文档。
答案 3 :(得分:1)
它的sys.argv [1]而不是2.如果你正在使用它,你还要确保将它转换为整数。
所以而不是
for i in range(sys.argv[2]):
你想要
for i in range(int(sys.argv[1])):
答案 4 :(得分:1)
我想建议看看Python的argparse
模块,这是解析命令行参数的一个巨大改进 - 它也可以转换为int
包括类型检查和错误报告/生成帮助消息。