Python及Pandas处理空表单输入时出现NoneType错误的解决咨询
解决方案
错误原因
- 首次加载页面未提交表单时,
request.values.get('searchinput')会返回None,直接对None调用.strip()方法就触发了AttributeError: 'NoneType' object has no attribute 'strip'报错。 - 你修改后的代码存在逻辑错误:初始化时
searchterms = [],空列表本身就不是None,所以if searchterms is not None的判断永远为真,错误逻辑还是会被执行,没有解决问题。
修复代码
先给get()方法设置空字符串作为默认值,避免拿到None,再判断输入是否有效:
# 安全获取输入,无值时默认返回空字符串,避免None search_input = request.values.get('searchinput', '').strip() if search_input: # 有有效输入时按规则拆分 searchterms = search_input.split(', ') filtered = df.query("Drug.str.contains('|'.join(@searchterms), na=False, case=False, regex=True)", engine='python') else: # 无输入(首次加载/空提交)时走默认逻辑,可按需二选一 # 方案1:用默认关键词搜索 searchterms = ["Foo"] filtered = df.query("Drug.str.contains('|'.join(@searchterms), na=False, case=False, regex=True)", engine='python') # 方案2:直接返回全量数据,不需要搜索 # filtered = df # 原代码的pd.concat无意义,单DataFrame不需要拼接,已移除 return render_template('drugsafety.html', tables=[filtered.to_html(classes='data')], titles=['na', 'Drug List'])
说明
- 该写法同时覆盖了首次加载无输入、用户输入全空格、用户提交空内容三种异常场景
- 原代码中包裹
df.query的pd.concat属于冗余操作,单DataFrame不需要拼接,直接使用查询结果即可,已优化移除
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

