如何解决Python代码报错:TypeError: 'NoneType' object is not subscriptable
问题定位
- 该报错的核心原因是你尝试用
[]下标语法访问了一个值为None的对象。你提供的代码中只有df['Close']使用了下标操作,由此可以确定变量df没有被正确赋值,实际值为None。 - 可排除
company_name导致该报错的可能:如果company_name为None,字符串拼接操作会报「无法将NoneType和字符串拼接」的错误,和当前报错信息不符。
修复步骤
- 第一步:排查
df的赋值逻辑
检查你读取数据源(本地csv/Excel文件、数据库查询结果、接口返回数据等)的代码是否执行成功。比如使用pd.read_csv()读取文件的场景,需要先确认文件路径正确、文件未损坏,赋值后可临时加一行st.write(df)输出df的内容,确认它是正常的pandas DataFrame对象。 - 第二步:增加空值校验逻辑,避免程序直接崩溃
可以在绘图前增加判断逻辑,示例代码如下:
# 导入库的代码保留 import streamlit as st import pandas as pd from PIL import Image # 原有df赋值的逻辑放在这里 # xxx # 新增校验逻辑 if df is not None and 'Close' in df.columns: st.header(company_name+" Close Price\n") st.line_chart(df['Close']) else: st.error("数据加载异常,请检查数据源是否包含Close字段")
- 第三步:如果
df来自Streamlit的文件上传组件,需要增加用户上传完成的判断,不要在用户还未上传文件时就执行df['Close']相关操作。
内容的提问来源于stack exchange,提问作者Blak040
相关产品推荐
相关产品推荐

