无法在Python中使用命令行参数

时间:2009-06-15 20:50:12

标签: python

我跑

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

5 个答案:

答案 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包括类型检查和错误报告/生成帮助消息。