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