Подтвердить что ты не робот

Преобразование данных 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, но почему он не конвертирует? Пожалуйста, помогите!!!

4b9b3361

Ответ 1

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

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

limit = int(limit)

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

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

Ответ 2

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

Итак, чтобы преобразовать строку 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

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