Форум программистов, компьютерный форум, киберфорум
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. Показов 30046. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем, мусолю эту тему уже 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
5452 / 2812 / 565
Регистрация: 07.11.2019
Сообщений: 4,626
14.03.2020, 08:41
Ошибка очевидна.
У вас в gamesFilter меньше элементов чем в proc.
И в 58 строке кода получается вы обращаетесь к элементу которого нет.
0
Модератор
Эксперт С++
 Аватар для zss
13751 / 10946 / 6487
Регистрация: 18.12.2011
Сообщений: 29,199
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
4580 / 2347 / 601
Регистрация: 26.11.2017
Сообщений: 5,263
Записей в блоге: 3
14.03.2020, 10:36
3 темы про одно и тоже.
naopite, я вам вчера написал как это делается с помощью openpyxl.
0
0 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 32
14.03.2020, 10:38  [ТС]
прошу прощения, я просто свой код пытаюсь разобрать)
я же основы только прохожу
0
148 / 118 / 36
Регистрация: 01.11.2019
Сообщений: 423
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
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер