Python中'TypeError: 'generator' object is not subscriptable' 错误解决方法

在使用jieba库对中文文本进行分词,并解析地址信息时,遇到如下错误:

Traceback (most recent call last):
  File 'C:\Users\TX\Desktop\Networkofdata\实验报告\11\q\中文NLP地址要素解析v4.py', line 330, in <module>
    province, city, district, street, community, devzone, houseno, cellno, floorno, intersection, subpoi, assist, tags = parse_address(info)
  File 'C:\Users\TX\Desktop\Networkofdata\实验报告\11\q\中文NLP地址要素解析v4.py', line 256, in parse_address
    if i > 0 and words[i - 1].isdigit():
TypeError: 'generator' object is not subscriptable

错误分析:

这个错误提示是因为 words 变量是一个生成器对象(generator object),无法使用下标索引。

原因:

jieba库的 cut() 方法返回的是一个生成器,而不是列表。生成器是一种节省内存的数据结构,它不会一次性生成所有结果,而是逐个生成。

解决方法:

words 生成器转换成列表对象,就可以使用下标索引了。

# 将生成器转换为列表
words = list(jieba.cut(info))

# 然后就可以正常使用下标索引了
if i > 0 and words[i - 1].isdigit():
    # ...

代码示例:

import jieba

info = 'XX小区1号楼2单元301室'

# 使用list()函数将生成器转换为列表
words = list(jieba.cut(info))

tag_list = []
cellno = ''

for i, word in enumerate(words):
    # 判断是否为数字
    if word.isdigit():
        if i > 0 and words[i-1].isdigit():
            tag_list.append('I-cellno')
            cellno += word
        else:
            tag_list.append('B-cellno')
            cellno = word
    # 判断是否为单元
    elif word.endswith('单元'):
        if i > 0 and words[i-1].isdigit():
            for char in word:
                if char == word[0]:
                    tag_list.append('I-cellno')
                elif char == word[-1]:
                    tag_list.append('E-cellno')
                else:
                    tag_list.append('I-cellno')
                cellno += char
        else:
            for char in word:
                if char == word[0]:
                    tag_list.append('B-cellno')
                elif char == word[-1]:
                    tag_list.append('E-cellno')
                else:
                    tag_list.append('I-cellno')
                cellno = word

print(tag_list)
print(cellno)

通过将 jieba.cut(info) 的结果用 list() 函数转换为列表,就能解决 'TypeError: 'generator' object is not subscriptable' 错误,并顺利进行后续的地址信息解析。

Python中'TypeError: 'generator' object is not subscriptable' 错误解决方法

原文地址: https://www.cveoy.top/t/topic/f2fU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录