user2786555
user2786555

Reputation: 309

'NoneType' object is not subscriptable?

list1 = ["name1", "info1", 10]
list2 = ["name2", "info2", 30]
list3 = ["name3", "info3", 50]
MASTERLIST = [list1, list2, list3]


def printer(lst):
    print ("Available Lists:")
    for x in range(len(lst)):
        print (lst[x])[0]

This code is returning the "'NoneType' object is not subscriptable" error when I try and run

printer(MASTERLIST)

What did I do wrong?

Upvotes: 26

Views: 259015

Answers (6)

Joshua Nixon
Joshua Nixon

Reputation: 1427

list1 = ["name1", "info1", 10]
list2 = ["name2", "info2", 30]
list3 = ["name3", "info3", 50]

def printer(*lists):
    for _list in lists:
        for ele in _list:
            print(ele, end = ", ")
        print()

printer(list1, list2, list3)

Upvotes: 1

keremistan
keremistan

Reputation: 444

The indexing e.g. [0] should occour inside of the print...

Upvotes: 1

Cam92
Cam92

Reputation: 21

Point A: Don't use list as a variable name Point B: You don't need the [0] just

print(list[x])

Upvotes: 2

Matthias
Matthias

Reputation: 13222

Don't use list as a variable name for it shadows the builtin.

And there is no need to determine the length of the list. Just iterate over it.

def printer(data):
    for element in data:
        print(element[0])

Just an addendum: Looking at the contents of the inner lists I think they might be the wrong data structure. It looks like you want to use a dictionary instead.

Upvotes: 2

TerryA
TerryA

Reputation: 59974

The print() function returns None. You are trying to index None. You can not, because 'NoneType' object is not subscriptable.

Put the [0] inside the brackets. Now you're printing everything, and not just the first term.

Upvotes: 21

Ethan Furman
Ethan Furman

Reputation: 69041

The [0] needs to be inside the ).

Upvotes: 15

Related Questions