С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/163: Рейтинг темы: голосов - 163, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32

Ошибка "TypeError: 'NoneType' object is not subscriptable"

14.03.2020, 08:30. Показов 30618. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем, мусолю эту тему уже 2 день, но никак не могу разобраться. Подскажите молодому чайнику, в чем проблема
Вот код:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from openpyxl import load_workbook #подружаем библиотеку
 
wb_val = load_workbook(filename = "secondq.xlsx", data_only = True) 
#указываем файл
info = wb_val["Лист2"]
 
#======================Список Лиг=======================
def lisst():    #объявляю функцию
    result = []     #создаю массив для дальнейшей записи данных в него
    for i in info["A5:A340"]:   #пробегаюсь циклом по каждой ячейки от начала до конца столбца
        for j in i:     #пробегаюсь от начала до конца каждой ячейки и получаю её имя
            a = j.value     #вывожу значение каждой ячейки
            result.append(a.replace("Баскетбол. ", ""))     #заменяю значение из полученных данных и записываю в массив 
    return result   #возвращаю массив
spis = lisst()     #вызываю функцию
 
#======================Проходимость=======================
 
def percent():
    result = []
    for i in info["F5:F340"]:
        for j in i:
            chisla = j.value * 100
            otvet = str(chisla // 1)
            test = otvet + "%"
            result.append(otvet)
    return result      
proc = percent()
 
#=====================Количество Игр========================
 
def qGames():   #объявляю функцию
    result = []     #создаю массив для дальнейшей записи в него
    for i in info["D5:D340"]:   #пробегаюсь циклом по каждой ячейки от начала до конца столбца 
        for j in i:     #пробегаюсь циклом от начала столбца до конца по каждой ячейки и получаю её имя
            a = j.value     #создаю переменную а и присваиваю ей значение каждой ячейки
            result.append(a)    #добавляю в массив 
    return result   #возвращаю массив
games = qGames()    #создаю переменную с и присваиваю ей функцию для дальнейшей работы с ней
 
#===================Фильтрация Игр=========================
def qGameFilter(): 
    result = []
    for i in range(len(games)):     #пробегаюсь циклом от начала до конца длинны функции C 
        if games[i] > 5:    #условие: если элемент из списка С > 5, то записать в массив 
            result.append(games[i])     #добавляю в массив элемент из списка С
gamesFilter = qGameFilter()
 
 
#===============Фильтрация проходимости====================
 
def filterPercent():
    result = []
    for i in range(len(proc)):
        if float(proc[i]) > float(70):
            result.append(i)
    for i in result:
        h = f'{spis[i]} / Игр: {gamesFilter[i]} / проходимость: {proc[i]}%'
        print(h)
filterProc = filterPercent()
 
 
#=============Запись в текстовый документ=================        
write = minClear()
file = open("result.txt", "w")
file.write(write)
file.close()


При запуске выдает ошибку: Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\basketba ll\first_quarter.py", line 60, in <module>
filterProc = filterPercent()
File "C:\Users\Administrator\Desktop\basketba ll\first_quarter.py", line 58, in filterPercent
h = f'{spis[i]} / Игр: {gamesFilter[i]} / проходимость: {proc[i]}%'
TypeError: 'NoneType' object is not subscriptable

Добавлено через 8 минут
Код настолько большой что я аж сам путаться начал, хотя программа там какая маленькая
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2020, 08:30
Ответы с готовыми решениями:

TypeError: 'NoneType' object is not subscriptable в скрипте
Код у меня такой(писал не сам, хочется разобраться) import imaplib import email import os server = &quot;imap.gmail.com&quot; ...

Непонятные проблемы с TypeError: 'NoneType' object is not subscriptable
a = ,,,,,] def spawn(a): r=random.random() if r&lt;=0.2: a = 1 elif r&lt;=0.4: a = 1 elif r&lt;=0.6: ...

Python & REGEX: TypeError: 'NoneType' object is not subscriptable
TypeError: 'NoneType' object is not subscriptable Привет. У меня есть эта ошибка, но в строке с формулой регулярного выражения. Как я...

13
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
14.03.2020, 08:35
naopite, присмотритесь: в некоторых функциях, которые задумывались как возвращающие какое-то значение вы не вернули его внутри функции, и потом вы присваиваете результат функции переменной (например filterProc = filterPercent()), в итоге по умолчанию функция возвращает None, а потом вы пытаетесь обратиться к результату по индексу, на что интерпретатор справедливо замечает, что "'NoneType' object is not subscriptable", т.е. "тип None не индексируемый"
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
14.03.2020, 08:41
Ошибка очевидна.
У вас в gamesFilter меньше элементов чем в proc.
И в 58 строке кода получается вы обращаетесь к элементу которого нет.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
14.03.2020, 08:41
Python
1
2
3
4
5
6
7
def qGameFilter(): 
    result = []
    for i in range(len(games)):     #пробегаюсь циклом от начала до конца длинны функции C 
        if games[i] > 5:    #условие: если элемент из списка С > 5, то записать в массив 
            result.append(games[i])     #добавляю в массив элемент из списка С
    return result   #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! забыли
gamesFilter = qGameFilter()
Python
1
2
3
4
5
6
7
8
9
10
def filterPercent():
    result = []
    for i in range(len(proc)):
        if float(proc[i]) > float(70):
            result.append(i)
    for i in result:
        h = f'{spis[i]} / Игр: {gamesFilter[i]} / проходимость: {proc[i]}%'
        print(h)
    return result   #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! забыли
filterProc = filterPercent()
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
14.03.2020, 08:44
проверьте значения переменных spis, gameFilter и proc.

Совет: почитайте PEP.

Рекомендация: Так как у Вас, код не пишется. Сначала все функции объявляются, а потом уже вызываются. А то бегать по Вашему коду и искать, где Вы там переменные вычисляете - полдня уйдет.
0
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32
14.03.2020, 08:51  [ТС]
Блин, точно, невнимательный очень.
Спасибо вам большое.
Еще вопрос есть, может подскажете если сможете.
Получается у меня не правильно всё равно отображается результат.

Получается я сперва вытаскиваю 3 столбца, это: Лига, Количество Игр, Проходимость
Затем я фильтрую каждый столбец. Количество игр >5, проходимость >70%.
Далее мне нужно все это совместить и вывести:
Я делаю вот так, но shell ругается
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from openpyxl import load_workbook #подружаем библиотеку
 
wb_val = load_workbook(filename = "secondq.xlsx", data_only = True) 
#указываем файл
info = wb_val["Лист2"]
 
#======================Список Лиг=======================
def lisst():    #объявляю функцию
    result = []     #создаю массив для дальнейшей записи данных в него
    for i in info["A5:A340"]:   #пробегаюсь циклом по каждой ячейки от начала до конца столбца
        for j in i:     #пробегаюсь от начала до конца каждой ячейки и получаю её имя
            a = j.value     #вывожу значение каждой ячейки
            result.append(a.replace("Баскетбол. ", ""))     #заменяю значение из полученных данных и записываю в массив 
    return result   #возвращаю массив
spis = lisst()     #вызываю функцию
 
#======================Проходимость=======================
 
def percent():
    result = []
    for i in info["F5:F340"]:
        for j in i:
            chisla = j.value * 100
            otvet = str(chisla // 1)
            test = otvet + "%"
            result.append(otvet)
    return result      
proc = percent()
 
#=====================Количество Игр========================
 
def qGames():   #объявляю функцию
    result = []     #создаю массив для дальнейшей записи в него
    for i in info["D5:D340"]:   #пробегаюсь циклом по каждой ячейки от начала до конца столбца 
        for j in i:     #пробегаюсь циклом от начала столбца до конца по каждой ячейки и получаю её имя
            a = j.value     #создаю переменную а и присваиваю ей значение каждой ячейки
            result.append(a)    #добавляю в массив 
    return result   #возвращаю массив
games = qGames()    #создаю переменную с и присваиваю ей функцию для дальнейшей работы с ней
 
 
#===================Фильтрация Игр=========================
def qGameFilter(): 
    result = []
    for i in range(len(games)):     #пробегаюсь циклом от начала до конца длинны функции C 
        if games[i] > 5:    #условие: если элемент из списка С > 5, то записать в массив 
            result.append(games[i])     #добавляю в массив элемент из списка С
    return result
gamesFilter = qGameFilter()
 
#===============Фильтрация проходимости====================
 
def filterPercent():
    result = []
    for i in range(len(proc)):
        if float(proc[i]) > float(70):
            result.append(i)
    return result
filterProc = filterPercent()
 
#=============Вывод на экран===============================
for i in range(proc):
    print(f'{spis[i]} + "Количество игр: " +{gamesFilter[i]} + "Проходимость: " + {filterProc[i]}')
 
#=============Запись в текстовый документ=================        
write = minClear()
file = open("result.txt", "w")
file.write(write)
file.close()


Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\basketba ll\first_quarter.py", line 60, in <module>
for i in range(proc):
TypeError: 'list' object cannot be interpreted as an integer

Добавлено через 1 минуту
Хорошо, спасибо. Я просто на курсы хожу 3 недели. Нам вот так пока объясняют всё, видимо чтоб понимать как всё устроено
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
14.03.2020, 08:54
Цитата Сообщение от naopite Посмотреть сообщение
for i in range(proc)
proc - это список, у него есть длина

in range(len(proc)-1)
0
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32
14.03.2020, 08:54  [ТС]
Как так выходит если в колонки идентичны?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
14.03.2020, 08:57
Цитата Сообщение от naopite Посмотреть сообщение
Как так выходит если в колонки идентичны?
при вычислении gamesFilter вы используете условие if games[i] > 5, то есть не все элементы идут в результат
0
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32
14.03.2020, 10:04  [ТС]
Увидел сообщение выше.

Добавлено через 1 час 1 минуту
В общем я запутался в своем же коде и решил переписать его, но не совсем понимаю логику.
Есть эксель файл в котором есть 3 столбца: лиги, количество игр, проходимость.

Задача такова:
Если количество игр больше 5 и проходимость больше 60%, то записать эту лигу с данными в список в формате:
Лига: Игры: Проходимость

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
leagues = []
games = []
percent = []
 
for l in info["A5:A335"]:
    for j in l:
        a = j.value
        leagues.append(a.replace("Баскетбол. ", ""))
        
for g in info["D5:D335"]:
    for x in g:
        b = x.value
        games.append(b)
        
for p in info["F5:F335"]:
    for z in p:
        c = int(z.value * 100 // 1)
        percent.append(c)
 
def Filter():
    result = []
    a = 0
    for i in range(len(percent)):
        if games[i] > 5 and percent[i] > 50:
            result.append(leagues[i], " ", games[i], " " , percent[i])
    print(result)
Filter()


Shell говорит мне что метод append может принимать только 1 аргумент. Как тогда можно сделать по другому?

Кликните здесь для просмотра всего текста
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\basketba ll\test.py", line 32, in <module>
Filter()
File "C:\Users\Administrator\Desktop\basketba ll\test.py", line 30, in Filter
result.append(leagues[i], " ", games[i], " " , percent[i])
TypeError: append() takes exactly one argument (5 given)
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
14.03.2020, 10:14
Лучший ответ Сообщение было отмечено naopite как решение

Решение

Python
1
result.append(f'{leagues[i]}, {games[i]}, {percent[i]}')
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
14.03.2020, 10:36
3 темы про одно и тоже.
naopite, я вам вчера написал как это делается с помощью openpyxl.
0
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32
14.03.2020, 10:38  [ТС]
прошу прощения, я просто свой код пытаюсь разобрать)
я же основы только прохожу
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
14.03.2020, 13:03
Используйте вложенные списки, каждую строку из excel записывайте вложенным списком, так легче будет фильтровать. На выходе из excel вы должны получить примерно такой список

Python
1
spisok =[['1 лига', 59, 3], ['2 лига', 60, 5]]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2020, 13:03
Помогаю со студенческими работами здесь

Ошибка 'NoneType' object is not subscriptable
здравствуйте, как я понял накопитель типа str_REC_f_txt_var1 += ... с использованием строки зло я прислушиваюсь....., ок ...

Ошибка TypeError: 'int' object is not subscriptable
Здравствуйте. Решаю следующую задачу: Дан набор из N целых положительных чисел. Для каждого числа вычисляется сумма двух последних цифр в...

Ошибка TypeError: 'int' object is not subscriptable
b = ]]]] print(a) Вот сам код не понимаю почему выходит ошибка

Не могу понять из-за появляется ошибка : TypeError: 'int' object is not subscriptable
https://pastebin.com/raw/f5HEJ0Q2 a, b = map(int, input().split()) v=int(input()) j= * (v + a) h= * (a * b) for i in range(v): ...

'NoneType' object is not subscriptable Python. Что делать?
Написал программу, которая по входящим правилам передвижениям (север, юг, запад, восток) для перекрёстков, находит самый короткий путь из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru