Argv – Cadena en entero

Soy bastante nuevo en python y he estado jugando con argv. Escribí este sencillo progtwig aquí y obtengo un error que dice:

TypeError: formato% d: se requiere un número, no 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) 

Cuando ejecuto filename.py 2 2, ¿argv pone 2 2 en cadenas? Si es así, ¿cómo los convierto en enteros?

Gracias por tu ayuda.

sys.argv es de hecho una lista de cadenas. Use la función int() para convertir una cadena en un número, siempre que la cadena se pueda convertir.

Necesitas asignar el resultado, sin embargo:

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

o simplemente use:

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

int() a int() pero ignoraste el valor de retorno.

Asigne los enteros convertidos a esas variables:

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

Haciendo justo:

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

no afectará a los elementos originales, ya que int devuelve un nuevo objeto int , los elementos dentro de sys.argv no se ven afectados por eso.

Si modificas la lista original puedes hacer esto:

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

Ejecutar int(argv[1]) realidad no cambia el valor de argv[1] (o de num1 , al que está asignado).

Reemplace esto:

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

Con este:

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

y debería funcionar.

Las funciones int (..), str (…) etc. no modifican los valores que se les pasan. En su lugar, devuelven una reinterpretación de los datos como un tipo diferente.