只读取命令行参数的一部分

时间:2012-10-23 09:20:49

标签: python

每当我通过命令行给出一个数字时,让我们说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之外添加打印“This is wrong”行。它给了我一个缩进错误?

5 个答案:

答案 0 :(得分:5)

问题是你在arg[0]上调用int。现在,arg是从初始循环中遗留下来的,当你遍历sys.argv中的所有参数时 - 它是该循环中的最后一个元素。因此,当您使用[0]对其进行切片时,您实际上是从最后一个参数获取第一个字符,而不是 - 如您所愿 - 第一个参数。

您的修复只是在那里使用sys.argv[1]

答案 1 :(得分:3)

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

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

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

最后,在每行前面放置4个空格是现在唯一的方法。如果他们支持某种代码防护风格(如GitHub)会很好,但他们不支持。 : - (

答案 2 :(得分:2)

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

在您的具体情况下,arg = '92'。所以,当您执行arg[0]时,您会获得'9'arg[1]会为您提供'2'

如果您需要第一个参数,请使用sys.argv[1]

答案 3 :(得分:1)

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

使用int(arg)解决问题。

答案 4 :(得分:1)

此循环后

for arg in sys.argv:
    print arg

arg是最后一个命令行参数。这是一个字符串,所以使用例如arg[0]获取该字符串中的第一个字符。