Python 正在将GET请求参数转换为int。。。如果是数字
假设我向用户显示一些数据,我希望用户能够使用Python 正在将GET请求参数转换为int。。。如果是数字,python,django,python-3.x,django-1.9,Python,Django,Python 3.x,Django 1.9,假设我向用户显示一些数据,我希望用户能够使用GET表单对数据库中的数字字段执行某种过滤,所以我有这样的功能 code = request.GET.get('code') condition = {} if( code is not None and int(code) > 0 ): condition['code'] = int(code) Somemodel.objects.filter(**condition) 但这只有在我的代码包含一个数字时才起作用,否则我会得到这个错误
GET
表单对数据库中的数字字段执行某种过滤,所以我有这样的功能
code = request.GET.get('code')
condition = {}
if( code is not None and int(code) > 0 ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
但这只有在我的代码包含一个数字时才起作用,否则我会得到这个错误
invalid literal for int() with base 10: ''
那么,用什么样的方法来处理这个问题呢?我应该使用
try/except
块吗?考虑到我可能会添加其他筛选器,我建议在相同的if
语句中处理此问题之所以会出现此错误,是因为int()需要数字中的值,它可以是字符串形式,但应该是像“22”、“33”等有效的数字
但在您的情况下,您传递的是空的,这就是它引发错误的原因。您可以使用type()实现所需的输出,它可以帮助您检查数字的类型
所以修改后的代码是
code = request.GET.get('code')
condition = {}
if( code is not None and type(code) == int ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
希望有帮助:)
isnumeric
可以检查code
是否可以转换为int
,还可以检查code
是否为正(当转换为整数时),从而替换int(code)>0
:
if code is not None and code.isnumeric():
condition['code'] = int(code)
您应该使用带有一个或多个整数字段的Django表单;他们为您执行此转换,然后您可以从
已清理的\u数据中获得结果任何您不使用Django的内置表单/验证来处理请求的原因。在此处获取?除了类型(code)
在该阶段将永远不会是类型int
。。。它将始终是一个可以为空的字符串,或者可能是有效的int,也可能不是有效的int。在上述检查之后,您可以应用其他检查,如验证数字字段等,请详细说明您的条件?isnumeric()需要unicode字符串?由于我得到的是“22”的AttributeError,但在u“22”中效果很好。@SunilLulla和Python3.x标记,我认为这应该适用于所有字符串(默认情况下为unicode)。对于Python2,您可以使用isdigit
。在Python2.x中,我更喜欢type()
检查int和其他数据类型,这是错误的检查方法吗?@SunilLulla在这种情况下,您不能使用type
检查int
,因为code
是字符串。但一般来说,您应该考虑使用继承继承的<代码> iStase。