Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在将GET请求参数转换为int。。。如果是数字_Python_Django_Python 3.x_Django 1.9 - Fatal编程技术网

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。