2013-06-29 3 views
6

Я довольно новичок в python, и я играл с argv. Я написал эту простую программу здесь и получаю сообщение об ошибке, которая говорит:Argv - String into Integer

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]) 

Doing просто:

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

не влияет на исходные элементы, как int возвращает новый объект int, элементы внутри sys.argv не являются под влиянием этого.

Yo изменить первоначальный список, вы можете сделать это:

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 (...) и т.д. не изменяют переданные им значения. Вместо этого они возвращают переинтерпретацию данных как другой тип.