23
votes
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?

6
The mistake that you are making is that you are whitespacing print function call wrong, it should be print(list[x])[0] according to PEP8, and your mistake becomes more obvious. ;) - Antti Haapala
Though the error message is different, this is basically the same problem as NoneType has no attribute 'something' - tripleee

6 Answers

19
votes

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.

13
votes

The [0] needs to be inside the ).

2
votes

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.

2
votes

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

print(list[x])
1
votes

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

1
votes
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)