使用web.py时如何判断URL中是否存在指定请求参数?
web.py判断URL指定参数是否存在的实现方法
直接通过.访问web.input()返回对象上不存在的参数属性时,会抛出AttributeError,这是因为web.input()返回的Storage对象不支持不存在属性的直接访问。
推荐实现方案
方案1:提前给参数设置默认值(官方推荐写法)
调用web.input()时直接为待检测参数指定默认值,参数不存在时会自动返回默认值,不会触发报错:import web # 单次调用获取所有请求参数,param2不存在时默认返回None request_params = web.input(param2=None) if request_params.param2 is not None: # 写入param2存在时的业务逻辑 param2_value = request_params.param2你可以根据参数类型设置对应默认值,比如数值类参数设默认0、字符串类参数设默认空串,减少后续类型兼容处理。
方案2:检测属性是否存在
如果不想提前设置默认值,可以用Python内置的hasattr方法判断参数属性是否存在:request_params = web.input() if hasattr(request_params, 'param2'): param2_value = request_params.param2方案3:转为字典后做键存在判断
可以把web.input()返回结果转为原生Python字典,用字典的键检测逻辑判断:request_params = dict(web.input()) if 'param2' in request_params: param2_value = request_params['param2']
注意事项
- 不要重复调用
web.input(),单次调用后把结果存在变量里复用即可,避免重复解析请求参数产生不必要的开销。 - 注意区分「参数不存在」和「参数存在但值为空」的场景:比如URL为
/scriptname?param1=test¶m2=时,param2是存在的,只是值为空字符串。如果需要过滤空值,可以在判断逻辑中追加值校验:request_params = web.input(param2=None) if request_params.param2 is not None and request_params.param2.strip() != "": # 处理参数存在且值非空的业务逻辑
内容的提问来源于stack exchange,提问作者carbontracking
相关产品推荐
相关产品推荐

