在python中将Unicode数据转换为int

San*_*hra 27 python unicode casting python-2.7

我从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')
Run Code Online (Sandbox Code Playgroud)

然后用它作为

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)
Run Code Online (Sandbox Code Playgroud)

它打印: <type 'unicode'>

但我不断收到typelimitunicode,从查询产生一个错误!我正在将unicode转换为int,但为什么不转换?请帮忙!!!

Ter*_*ryA 51

int(limit) 返回转换为整数的值,并且在调用函数时不会对其进行更改(这是您期望的).

改为:

limit = int(limit)
Run Code Online (Sandbox Code Playgroud)

或者在确定时limit:

if 'limit' in user_data :
    limit = int(user_data['limit'])
Run Code Online (Sandbox Code Playgroud)


Jak*_* M. 7

在python中,整数和字符串是不可变的,并按值传递.您不能将字符串或整数传递给函数,并期望修改参数.

因此,要将字符串转换limit="100"为数字,您需要这样做

limit = int(limit) # will return new object (integer) and assign to "limit"
Run Code Online (Sandbox Code Playgroud)

如果你真的想要解决它,你可以使用一个列表.列表在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
Run Code Online (Sandbox Code Playgroud)

但你真的不需要它.(有时当你使用递归并且需要传递一些可变状态时).