it-swarm.com.de

Konvertieren Sie Unicode-Daten in int in python

Ich erhalte Werte aus der URL als:

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

Dann benutze es als

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)

Es druckt: <type 'unicode'>

aber ich erhalte immer die type von limit als unicode, was einen Fehler von der Abfrage auslöst !! Ich konvertiere Unicode nach Int, aber warum konvertiert es nicht? Bitte helfen Sie !!!

27
Sankalp Mishra

int(limit) gibt den in eine Ganzzahl umgewandelten Wert zurück und ändert ihn nicht an der Stelle, an der Sie die Funktion aufrufen (was Sie erwarten).

Tun Sie dies stattdessen:

limit = int(limit)

Oder beim Definieren von limit:

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

In Python sind Ganzzahlen und Zeichenfolgen nveränderlich und als Wert übergeben . Sie können einer Funktion keine Zeichenfolge oder Ganzzahl übergeben und erwarten, dass das Argument geändert wird.

So konvertieren String limit="100" zu einer Nummer, die Sie tun müssen

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

Wenn Sie wirklich wollen, können Sie eine Liste verwenden. Listen können in Python geändert werden. Wenn Sie eine Liste übergeben, übergeben Sie die Referenz und nicht die Kopie. Sie könnten also Folgendes tun:

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

Aber du solltest es nicht wirklich brauchen. (Vielleicht manchmal, wenn Sie mit Rekursionen arbeiten und einen veränderlichen Zustand übergeben müssen).

7
Jakub M.