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 в строки? Если да, то как их преобразовать в целые числа?

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

3 ответов


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

вам нужно присвоить результат, однако:

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

или просто использовать:

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

ты назвал int() но игнорировать возвращаемое значение.


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

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

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

заменить:

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

С этого:

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

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

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