2016-12-06 3 views
0

Вот мой код:«NoneType» не subscriptable при попытке создать массив с данными JSON

import math 
import json 

def make_teams_games(): 

cows=[0 for x in range (3)] 
counter = 0 
with open('2016ultimatedata.json') as jsonfile: 
    d2016 = json.load(jsonfile)              

    for i in d2016['teams']: 
     if i['name'] == 'Oberlin (Flying Horsecows)': 
      cows[0] = i['name'] 
      cows[1] = i['id'] 
      cows[2] = i['usau_rating']['score'] 
    for i in d2016['teams']: 
     if i['usau_rating']['score'] != None: 
      if i['usau_rating']['score'] > (cows[2]-120) and i['usau_rating']['score'] < (cows[2]+120): 
       counter = counter+1 
      print(counter) 
    teams = [[0 for x in range (3)] for y in range (counter)] 

make_teams_games()

Im известно, что третий, если заявление, вероятно, может быть написана с использованием абсолютное значение, но сообщение об ошибке бросает строку выше. Почему я получаю эту ошибку?

Вот пример части файла JSon:

"teams": [ 
{ 
    "id": "dHP4OF2933HXVGrIpWK%2f4FCcI6ithl6x98Nwnx3%2b6Ic", 
    "usau_rating": { 
    "wins": 10, 
    "score": 1330.0, 
    "losses": 8 
    }, 
    "name": "Alabama-Birmingham (Inferno)" 
}, 
{ 
    "id": "Bh3IMJNlD144zClqw0PgIIksuF%2fKC5MCDoo%2fbjsZ0f0", 
    "usau_rating": null, 
    "name": "Wisconsin-Stout (Yeti Ultimate)" 
}, 
{ 
    "id": "QwWYWgLFpfsquPuzXaPZ1jc1hlf3kw%2bUWQEqdH5FGbc", 
    "usau_rating": { 
    "wins": 14, 
    "score": 1107.0, 
    "losses": 4 
    }, 
    "name": "RIT (RIT Spudheds)" 
}, 
{ 
    "id": "%2bIG3fKP7FAnAoAmq5paF760u9emIIlzIWoGNKGzb1zs", 
    "usau_rating": { 
    "wins": 9, 
    "score": 846.0, 
    "losses": 11 
    }, 
    "name": "Princeton (Clockwork)" 
}, 
{ 
    "id": "rHK4D3huWbOjSr20VH%2f37Tq%2bcDh52EYpYqXPEHyBloQ", 
    "usau_rating": { 
    "wins": 11, 
    "score": 1188.0, 
    "losses": 7 
    }, 
    "name": "Dayton (UD Ultimate)" 
} 

А вот отслеживающий:

Traceback (most recent call last): 
    File "game_diff_by_difference_in_team_diff.py", line 24, in <module> 
    make_teams_games() 
    File "game_diff_by_difference_in_team_diff.py", line 18, in make_teams_games 
    if i['usau_rating']['score'] != None: 
    TypeError: 'NoneType' object is not subscriptable 
+0

всегда отображается полное сообщение об ошибке (Traceback). Есть информация, которая делает проблему – furas

ответ

0

Похоже, что i ['usau_rating'] является None. Попробуйте

if i['usau_rating'] is not None and i['usau_rating']['score'] is not None: 
    .... 

Таким образом, вы проверяете, не первый ли поиск словаря None, прежде чем пытаться его подстроить.


Sidenote: Я использовал is not семантические вместо = потому is чеков для типа не только '' falsy значение, как != делает!. Вы можете проверить this answer, если вы хотите узнать больше

+1

Это не делает ничего другого, ни мой 'if i ['usau_rating'] ['score']! = None:' работал или этот – tharvey

+0

Извините, я забыл i перед ['usau_rating '] в моем первом сообщении. Сделал редактирование и сам протестировал - никаких ошибок. –

+0

спасибо, ха-ха, теперь это сработало – tharvey

0

usau_rating является 'нулевой' (Ни в Python) для Wisconsin-Stout.

Смежные вопросы