Argv — преобразовать строку в целое число

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

TypeError: формат %d: требуется число, а не 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 в строки? Если да, то как преобразовать их в целые числа?

Спасибо за вашу помощь.


person Andrew Blanchette    schedule 29.06.2013    source источник


Ответы (3)


sys.argv действительно является списком строк. Используйте функцию int(), чтобы преобразовать строку в число, при условии, что строку можно преобразовать.

Однако вам необходимо назначить результат:

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

или просто используйте:

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

Вы вызвали int(), но проигнорировали возвращаемое значение.

person Martijn Pieters    schedule 29.06.2013

Присвойте преобразованные целые числа этим переменным:

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

Делаю только:

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
person Ashwini Chaudhary    schedule 29.06.2013

Выполнение int(argv[1]) на самом деле не изменяет значение argv[1] (или num1, которому оно назначено).

Замените это:

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

С этим:

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

и это должно работать.

Функции int(..), str(...) и т. д. не изменяют передаваемые им значения. Вместо этого они возвращают переинтерпретацию данных как другого типа.

person J David Smith    schedule 29.06.2013