2013-05-10 15 views
23

sto ottenendo valori passati da URL,:Convertire i dati Unicode a int in python

user_data = {} 
if (request.args.get('title')) : 
    user_data['title'] =request.args.get('title') 
if(request.args.get('limit')) : 
    user_data['limit'] = request.args.get('limit') 

poi usarlo come

if 'limit' in user_data : 
    limit = user_data['limit'] 
conditions['id'] = {'id':1} 
int(limit) 
print type(limit) 
data = db.entry.find(conditions).limit(limit) 

Esso stampa: <type 'unicode'>

ma io continuo a ricevere la type di limit come unicode, che genera un errore dalla query !! Sto convertendo unicode in int ma perché non si sta convertendo ?? Per favore aiuto !!!

risposta

43

int(limit) restituisce il valore convertito in un numero intero e non lo modifica in posizione quando si chiama la funzione (che è ciò che si prevede che sia).

fare questo, invece:

limit = int(limit) 

O quando definiting limit:

if 'limit' in user_data : 
    limit = int(user_data['limit']) 
+0

Ottenuto la logica .. Grazie –

+1

+1 E da "non lo cambia immediatamente", il che significa che non lo cambia per riferimento. – Jared

+0

@Jared Aggiungerò questo, grazie :). Sapevo che la mia formulazione non era perfetta in qualche modo: p – TerryA

7

In Python, interi e stringhe sono immutable e sono passed by value. Non è possibile passare una stringa, o un intero, a una funzione e aspettarsi che l'argomento venga modificato.

Quindi, per convertire la stringa limit="100" ad un numero, è necessario fare

limit = int(limit) # will return new object (integer) and assign to "limit" 

Se davvero vuole andare intorno ad esso, è possibile utilizzare un elenco. Le liste sono mutabili in python; quando si passa una lista, si passa il suo riferimento, non si copia. Quindi potresti fare:

def int_in_place(mutable): 
    mutable[0] = int(mutable[0]) 

mutable = ["1000"] 
int_in_place(mutable) 
# now mutable is a list with a single integer 

Ma non dovresti averne bisogno davvero. (forse a volte quando lavori con le ricorsioni e devi passare qualche stato mutabile).

Problemi correlati