2013-06-29 172 views
6

我在Python中很新,我一直在玩argv。我写了这个简单的程序,这里并获得一个错误,指出:Argv - 将字符串转换为整数

TypeError: %d format: a number is required, not 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成字符串?如果是这样,我该如何将它们转换为整数?

感谢您的帮助。

回答

9

sys.argv的确是一个字符串列表。使用int()函数将字符串转换为数字,前提是字符串可以转换为

您需要分配结果,但是:

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

或简单地使用:

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

你确实叫int()却忽略了返回值。

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 
1

运行int(argv[1])实际上并没有改变argv[1]值(或num1,它被分配到)。

替换此:

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

有了这个:

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

,它应该工作。

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