python typeerror subscriptable_python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法...

发现问题

写python的时候出现了这个错,然后网上的教程的解决方案几乎都是——“重新定义下这个变量”,看的我一脸懵逼

后来发现原来是我把return None的方法赋给了变量,之后操作变量导致的,直接上代码

for i in range(2000):

read_lines = random.shuffle(read_lines) # 问题出在这里了

print(read_lines)

咋一看是没啥问题,但是一运行就报错

>>TypeError: 'NoneType' object is not subscriptable

后来发现原来 random.shuffle这个函数他是return None的,但是我把他赋值给了read_lines,导致后续在操作read_lines的时候一直都是这个报错,包括打印read_lines也报错

这个是random库里面的代码(看他的注释里面说的是return None)

def shuffle(self, x, random=None):

"""

Shuffle list x in place, and return None.

Optional argument random is a 0-argument function returning a

random float in [0.0, 1.0); if it is the default None, the

standard random.random will be used.

"""

if random is None:

randbelow = self._randbelow

for i in reversed(range(1, len(x))):

# pick an element in x[:i+1] with which to exchange x[i]

j = randbelow(i+1)

x[i], x[j] = x[j], x[i]

else:

_int = int

for i in reversed(range(1, len(x))):

# pick an element in x[:i+1] with which to exchange x[i]

j = _int(random() * (i+1))

x[i], x[j] = x[j], x[i]

解决方案

把上面一行赋值语句改掉就好了

for i in range(2000):

random.shuffle(read_lines)

print(read_lines)

content_list = []

总结

到此这篇关于python报错TypeError: ‘NoneType‘ object is not subscriptable解决方法的文章就介绍到这了,更多相关python报错TypeError解决内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法

本文地址: http://www.cppcns.com/jiaoben/python/361618.html

### 解析 `TypeError: 'NoneType' object is not subscriptable` 错误 当遇到 `TypeError: 'NoneType' object is not subscriptable` 这类错误时,通常意味着尝试访问或操作的对象实际上是 `None` 而不是一个可以被下标访问的数据结构[^3]。 #### 原因分析 此错误可能由多种因素引起: - **代码逻辑问题**:某处函数返回了 `None` 或者直接设置了变量为 `None`。 - **数据处理不当**:读取文件过程中出现了异常情况,比如路径错误、编码不匹配或是部分数据损坏等。 - **索引越界或其他非法操作**:试图通过不存在的关键字获取字典中的值;列表、字符串等序列类型的切片超出范围等情况也可能引发该错误。 针对 pandas 读取 CSV 文件时报此类错误的情况,具体可以从以下几个方面着手排查并解决问题: #### 数据源验证 确保输入的CSV文件本身没有问题。打开文件确认其格式正确无损,并且每一列都含有预期的内容而不是空白行或多出来的分隔符。如果存在缺失值,则应提前设定好如何处理这些特殊情况(如填充默认值)。对于中文路径的问题也需要注意避免,因为这可能会导致意想不到的行为。 #### 修改加载方式 调整 Pandas 的参数设置来更好地适应实际需求。例如指定合适的编码形式(`encoding`)防止乱码现象发生;利用 `na_values` 参数定义哪些字符应该被视为NA/NaN标记从而便于后续清理工作;还可以考虑增加 `error_bad_lines=False` 来跳过有问题的记录而不终止整个导入过程[^4]。 ```python import pandas as pd df = pd.read_csv('data.csv', encoding='utf8', na_values=['NA'], error_bad_lines=False) ``` #### 处理潜在的 None 类型 一旦成功创建 DataFrame 后,仍需进一步检查是否存在任何单元格内含 `None` 或 NaN 的情形。可以通过 `.isnull()` 方法找出所有这样的位置进而采取措施填补它们或者删除对应条目以维持数据集的一致性和完整性。 ```python # 查看是否有 null 值 print(df.isnull().sum()) # 删除包含 null 的行 cleaned_df = df.dropna() # 或者用特定值替换 null filled_df = df.fillna(value=0) # 使用零代替 Null ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值