web-dev-qa-db-fra.com

Convertir les données Unicode en int dans python

J'obtiens des valeurs passées d'url comme:

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')

Puis en l'utilisant comme

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)

Il imprime: <type 'unicode'>

mais je continue à obtenir le type de limit comme unicode, ce qui soulève une erreur de requête !! Je convertis unicode en int mais pourquoi ne convertit-il pas ?? S'il vous plaît, aidez !!!

27
Sankalp Mishra

int(limit) renvoie la valeur convertie en entier et ne la modifie pas en place lorsque vous appelez la fonction (ce à quoi vous vous attendez).

Faites ceci à la place:

limit = int(limit)

Ou lors de la définition de limit:

if 'limit' in user_data :
    limit = int(user_data['limit'])
51
TerryA

En python, les entiers et les chaînes sont immuables et sont passés par valeur . Vous ne pouvez pas passer une chaîne ou un entier à une fonction et vous attendre à ce que l'argument soit modifié.

Donc, pour convertir la chaîne limit="100" à un nombre, vous devez faire

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

Si vous voulez vraiment faire le tour, vous pouvez utiliser une liste. Les listes sont modifiables en python; lorsque vous passez une liste, vous passez sa référence, pas une copie. Vous pourriez donc faire:

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

Mais vous ne devriez pas vraiment en avoir besoin. (peut-être parfois lorsque vous travaillez avec des récursions et devez passer un état mutable).

7
Jakub M.