假设我向用户显示一些数据,我希望用户能够使用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: ''
那么pythonic处理这个问题的方法是什么呢?我应该使用try/except
块吗?我更喜欢在同一个if
语句中处理这个问题,因为我可能会添加其他过滤器
5条答案
按热度按时间kokeuurv1#
isnumeric
可以检查code
是否可以 * 转换 * 为int
,并检查code
是否为正(当转换为整数时),从而替换int(code) > 0
:oknwwptz2#
你应该使用一个带有一个或多个IntegerField的Django表单;他们为你做这个转换,然后你可以从
cleaned_data
得到结果。jyztefdp3#
此函数将GET参数相应地转换为python numeric/bool:
chhkpiq44#
你可以使用try/except块来使用更多的Python方式:
cbjzeqam5#
你得到这个错误的原因是因为int()期望的值是数字,它可以是字符串形式,但它应该是一个数字,如“22”,“33”等是有效的。
但是在你的例子中,你传递的是空值,这就是为什么它会引发错误。你可以使用type()来实现你想要的输出,它可以帮助你检查数字的类型
所以修改后的代码是
希望有帮助:)