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 !!!
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'])
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).