1

每当我通过命令行给出一个数字时,比如说 92,它只需要 9,完全忽略 2。但是,如果我使用 arg[1],它将使用 2 而不是 9。 import sys

for arg in sys.argv:
    print arg

print ""    
print "-----"
print ""    

try:
    argNumber = int(arg[0])
except ValueError:
    argNumber = 0
    print "This is wrong"

for i in range(argNumber, 0, -1):
    print i

另外,由于某种原因,我无法在除了 ValueError 之外添加打印“这是错误的”行。它给了我一个缩进错误?

4

5 回答 5

5

问题是您正在调用 int on arg[0]。现在,arg当您遍历所有参数时,初始循环剩下的就是sys.argv- 它是该循环的最后一个元素。所以,当你用 切片它时[0],你实际上是从最后一个参数中获取第一个字符,而不是 - 正如你所期望的 - 第一个参数。

您的解决方法是简单地使用sys.argv[1]那里。

于 2012-10-23T09:25:24.323 回答
3

您正在重新使用循环变量 , arg,因此您正在访问sys.argv[1], 而不是整个字符串的第一个字符。尝试:

try:
    argNumber = int(sys.argv[1])
except ValueError:
    argNumber = 0

我在您的代码段中没有看到“这是错误的”行,所以我无法对此发表评论。

最后,在每行前面放置 4 个空格是目前唯一的方法。如果他们支持某种风格的代码围栏(如 GitHub),那就太好了,但他们不支持。:-(

于 2012-10-23T09:25:42.773 回答
2

循环运行后,arg 包含传递的最后一个参数的值,作为字符串。

在您的具体情况下,arg = '92'. 所以当你这样做时arg[0],你得到'9'arg[1]给予你'2'

sys.argv[1]在需要第一个参数的情况下使用。

于 2012-10-23T09:25:53.720 回答
1

那是因为arg[0]是分配给 的字符串的第一个元素arg。在您的代码中,这是最后一个命令行参数。

用于int(arg)解决问题。

于 2012-10-23T09:25:28.530 回答
1

在这个循环之后

for arg in sys.argv:
    print arg

arg是最后一个命令行参数。它是一个字符串,因此使用 egarg[0]获取该字符串中的第一个字符。

于 2012-10-23T09:26:40.510 回答