2013-06-29 24 views
6

Tôi khá mới ở python và tôi đã chơi với argv. Tôi đã viết chương trình đơn giản này ở đây và nhận được một lỗi nói rằng:Argv - Chuỗi thành số nguyên

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) 

Khi tôi chạy filename.py 2 2, không argv đưa 2 2 thành chuỗi? Nếu vậy, làm thế nào để chuyển đổi chúng thành số nguyên?

Cảm ơn sự giúp đỡ của bạn.

Trả lời

9

sys.argv thực sự là danh sách các chuỗi. Sử dụng hàm int() để chuyển chuỗi thành một số, miễn là chuỗi có thể được chuyển đổi.

Bạn cần phải assign kết quả, tuy nhiên:

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

hoặc đơn giản là sử dụng:

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

Bạn đã gọi int() nhưng bỏ qua các giá trị trả về.

4

Gán các số nguyên chuyển đổi ra các biến:

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

Làm chỉ:

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

sẽ không ảnh hưởng đến mục gốc như int trả về một đối tượng mới int, các mục bên trong sys.argv không bị ảnh hưởng bởi điều đó.

Yo sửa đổi danh sách ban đầu bạn có thể làm điều này:

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

Chạy int(argv[1]) không thực sự thay đổi giá trị của argv[1] (hoặc của num1, mà nó được gán).

Thay thế này:

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

Với điều này:

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

và nó sẽ làm việc.

Hàm int (..), str (...) vv không sửa đổi các giá trị được truyền cho chúng. Thay vào đó, họ trả về việc diễn giải lại dữ liệu dưới dạng một loại khác.