2013-06-29 220 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(...)等函數不會修改傳遞給它們的值。相反,他們返回作爲一種不同類型的數據重新解釋。