Argv - String into Integer

时间:2013-06-29 18:32:33

标签: python argv

我是python的新手,我一直在玩argv。我在这里编写了这个简单的程序并收到错误消息:

  

TypeError:%d format:需要一个数字,而不是str

from sys import argv

file_name, num1, num2 = argv
int(argv[1])
int(argv[2])
def addfunc(num1, num2):
    print "This function adds %d and %d" % (num1, num2)
    return num1 + num2

addsum = addfunc(num1, num2)
print "The final sum of addfunc is: " + str(addsum)

当我运行filename.py 2 2时,argv是否将2 2放入字符串?如果是这样,我如何将这些转换为整数?

感谢您的帮助。

3 个答案:

答案 0 :(得分:15)

sys.argv确实是一个字符串列表。如果字符串可以转换,请使用int()函数将字符串转换为数字。

您需要分配结果,但是:

num1 = int(argv[1])
num2 = int(argv[2])

或只是使用:

num1, num2 = int(num1), int(num2)

您确实致电int()但忽略了返回值。

答案 1 :(得分:4)

将转换后的整数分配给这些变量:

num1 = int(argv[1])  #assign the return int to num1
num2 = int(argv[2])

只做:

int(argv[1])
int(argv[2])

不会影响原始项目,因为int会返回新的int对象,sys.argv内的项目不受此影响。

哟修改原始列表,你可以这样做:

argv[1:] = [int(x) for x in argv[1:]]
file_name, num1, num2 = argv  #now num1 and num2 are going to be integers

答案 2 :(得分:1)

正在运行int(argv[1])实际上并未更改argv[1](或num1的值,而是int(argv[1]) int(argv[2])

替换它:

num1 = int(num1)
num2 = int(num2)

有了这个:

{{1}}

它应该有用。

int(..),str(...)等函数不会修改传递给它们的值。相反,他们返回将数据重新解释为不同的类型。