TypeError: "NoneType" is not a subscription

I have a python program that creates an error:

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 (-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 

Error:

 File "coarticulation.py", line 217, in update next_low, next_high = phonlist[next_row][next_col] TypeError: 'NoneType' object is unsubscriptable 

What does the error mean and how to fix it?

+6
source share
2 answers

This is not a problem with this piece of code. It means that

 phonlist 

or

 phonlist[next_row] 

not a list (or subcritical type), a None . Find where you are creating the list.

Edit:

 curr_low, curr_high = phonlist[curr_row][curr_col] next_low, next_high = phonlist[next_row][next_col] 

Since the error is in the second line, I think phonlist[next_row] is None .

+8
source

This is the error Python returns when trying to access an indexed indexed value from a None value (Python equivalent is null ):

 >>> a = None >>> a[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not subscriptable 
+11
source

Source: https://habr.com/ru/post/894887/


All Articles