Python 类型错误:';非类型';对象不可订阅
我有一个python程序,它会产生一个错误:Python 类型错误:';非类型';对象不可订阅,python,Python,我有一个python程序,它会产生一个错误: def update_ranges(phonemelist) : """ updating the rows and columns of the list of input phonemes""" # make a copy of the list as we're going to modify it (optional) phonlist = phonemelist[:] # we don't need the
def update_ranges(phonemelist) :
""" updating the rows and columns of the list of input phonemes"""
# make a copy of the list as we're going to modify it (optional)
phonlist = phonemelist[:]
# we don't need the row titles, they just complicate things
rowtitles, phonlist = zip(*phonlist)
rows = len(phonlist)
columns = range(len(phonlist[0]))
# for each row except the last
for i in xrange(rows - 1):
# update it by going down all the rows below it
for k in xrange(i+1, rows):
# for both columns
for j in columns:
update(phonlist, i, j, k, j)
# put the row titles back in (optional)
phonlist = zip(rowtitles, phonlist)
return phonlist
def update(phonlist, curr_row, curr_col, next_row, next_col) :
""" applying co-articulation rules for comparing the ranges """
curr_low, curr_high = phonlist[curr_row][curr_col]
next_low, next_high = phonlist[next_row][next_col]
# Rule 1: when one of the ranges is (-1,-1)
# replace the current range if it's (-1, -1) as its empty
if (curr_low, curr_high) == (-1, -1) :
phonlist[curr_row][curr_col] = next_low, next_high
return
# do nothing if the next range is (-1,-1)
if (next_low, next_high) == (-1, -1) :
return
# Rule 2: when ranges don't overlap
# replace the lowest value of current range when the next range is lower than the current range
elif curr_low > next_high :
phonlist[curr_row][curr_col] = curr_low, curr_low
return
# replace the highest values of current range when the next range is higher than the current range
elif next_low > curr_high :
phonlist[curr_row][curr_col] = curr_high, curr_high
return
# Rule 3: when ranges completely overlap
elif curr_low <= next_low and next_high <= curr_high or curr_low >= next_low and next_high >= curr_high :
# replace the values of the next range when the next range completely lies in the current range
if curr_high - curr_low > next_high - next_low :
phonlist[curr_row][curr_col] = next_low, next_high
return
# replace the values of the current range when the current range completely lies in the next range
else :
phonlist[curr_row][curr_col] = curr_low, curr_high
return
# Rule 4: when the ranges partially overlap
else :
# replace the values that is common to both ranges when next range is further ahead of the current
if curr_low < next_low and curr_high < next_high :
phonlist[curr_row][curr_col] = next_low, curr_high
return
# replace the values that is common to both ranges when current range is further ahead of the next
else :
phonlist[curr_row][curr_col] = curr_low, next_high
return
错误的含义是什么?如何修复它?这部分代码没有问题。也就是说
phonlist
或
不是列表
(或订阅类型),而是无
。查找创建列表的位置
编辑:
curr_low, curr_high = phonlist[curr_row][curr_col]
next_low, next_high = phonlist[next_row][next_col]
由于错误在第二行,我认为
phonlist[next_row]
是None
这是Python在尝试从None
值(Python的null
等效值)访问下标(索引)值时返回的错误:
>a=None
>>>a[0]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“非类型”对象不可下标
我的意思是,我首先在一个单独的文件中编写了这么多内容,并使用用户给定的输入。这是我研究项目的代码。当我把这个部分加入到我正在处理的大代码中,它从一个大列表中的文件中获取输入,然后它会显示这个错误。谢谢。我已经编辑了问题并添加了调用此函数的部分。是因为在phonlist[next_row][next_col]中没有传递值吗?与所有的比较一样,使用了phonlist[curr_row][curr_col]。很抱歉,有很多变量、函数和嵌套循环,很难弄清楚发生了什么。
phonlist[next_row]
curr_low, curr_high = phonlist[curr_row][curr_col]
next_low, next_high = phonlist[next_row][next_col]
>>> a = None
>>> a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not subscriptable