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