Конвертировать данные Unicode в int в python

Я получаю значения, переданные из URL как:

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

Затем, используя его как

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)

Это печатает: <type 'unicode'>

но я продолжаю получать type из limit как unicode, который вызывает ошибку из запроса! Я конвертирую Unicode в Int, но почему он не конвертирует?? Пожалуйста помоги!!!

2 ответа

Решение

int(limit) возвращает значение, преобразованное в целое число, и не меняет его на месте при вызове функции (что вы и ожидаете).

Сделайте это вместо этого:

limit = int(limit)

Или при определении limit:

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

В Python целые числа и строки являются неизменяемыми и передаются по значению. Вы не можете передать строку или целое число функции и ожидать, что аргумент будет изменен.

Так что конвертировать строку limit="100" на номер, вам нужно сделать

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

Если вы действительно хотите обойти это, вы можете использовать список. Списки изменчивы в Python; когда вы передаете список, вы передаете его ссылку, а не копировать. Так что вы могли бы сделать:

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

Но вам не нужно это на самом деле. (может быть, иногда, когда вы работаете с рекурсиями и вам нужно передать какое-то изменяемое состояние).

Другие вопросы по тегам