Czytam prawidłowy plik JSON (zagnieżdżone głęboko 5 poziomów), a następnie dodając do niej pewne dane, a następnie stara się wykorzystać te dane dla niektórych obliczeń.Random „int nie jest subscriptable” zachowanie
Dostaję int is not subscriptable
błędów w sposób losowy. Nie mogę tego objąć. odlewanie do str()
nie pomaga, drukowanie przy użyciu pprint
nie zmniejsza jej, przesyłanie do int()
na wejściu również nie pomaga. Ja rozpaczliwie ucieka opcji ...
Główną funkcją
with open(rNgram_file, 'r', encoding='utf-8') as ngram_file:
data = json.load(ngram_file)
data = rank_items(data)
data = probability_items(data)
rank_items (dane)
Wszystkie wartości są liczone na poziomie 5-zagnieżdżonego i dodał działa w górę w drzewie. Dodałem rzutowanie int()
do wejścia jako możliwe rozwiązanie, ale to nie pomogło. Ten problem występuje z coraz x_grams['_rank']
for ngram, one_grams in data.items():
ngram_rank = 0
for one_gram, two_grams in one_grams.items():
one_gram_rank = 0
[..]
for four_gram, values in four_grams.items():
# 4gram = of, values = 34
three_gram_rank += values
four_grams['_rank'] = int(three_gram_rank)
two_gram_rank += three_gram_rank
[..]
two_grams['_rank'] = int(one_gram_rank)
ngram_rank += one_gram_rank
one_grams['_rank'] = int(ngram_rank)
probability_items (dane)
To gdzie występują błędy. Pozornie losowo, będzie narzekać na int is not subscriptable
, gdzie x_rank
lub x_grams['rank]
są drukowane lub przypisywane, nawet jeśli są oceniane za pomocą type()
(które, jeśli działa, mówi <class 'int'>
) I oznaczone najczęściej linii z komentarzem poniżej. wystarczająco Niesamowicie, linia 2 i 3 nie wyjątek ...
for ngram, one_grams in data.items():
ngram_rank = int(one_grams['_rank']) # never gives an error
print("NgramRank: ", str(ngram_rank)) # never gives an error
if ngram != '_rank':
for one_gram, two_grams in one_grams.items():
pprint(type(two_grams['_rank'])) # common error point
one_gram_rank = str(two_grams['_rank']) # never reaches this
if one_gram != '_rank':
for two_gram, three_grams in two_grams.items():
pprint(type(three_grams['_rank'])) # common error point
pprint(str(three_grams['_rank'])) # never reaches this
two_gram_rank = str(three_grams['_rank'])
[..]
one_gram_prob = int(one_gram_rank)/int(ngram_rank)
two_grams['_prob'] = one_gram_prob
ngram_prob = int(ngram_rank)/int(ngram_rank)
one_grams['_prob'] = ngram_prob
W randowm modzie, jest wyjątek na wspólnym punkcie błędu powyżej. Z powodu tych wyjątków poniższe wiersze nigdy nie zostały osiągnięte. Ale jeśli usuniesz typowe punkty błędów, poniższe wiersze staną się punktami błędu. Czasami wykonuje pełne przetwarzanie w pętli wewnętrznej, drukując <class 'int'>
podczas oceniania i wszystkie, aż zatrzyma się na wyjątku.
nie mam pojęcia, co się dzieje, ja nawet nie rozumiem, jak ten błąd może wystąpić, gdy jestem oceniając go Type()
Ponieważ jest to dziwny problem, a ja oczywiście podejmowania dziwny błąd , Wpisałem tutaj cały kod: https://gist.github.com/puredevotion/7922480
Mam nadzieję, że ktoś może pomóc!
Traceback szczegóły
['Traceback (most recent call last):\n', ' File "Ngram_ranking.py", line 121, in probability_items\n pprint(type(four_grams[\'_rank\']))\n', "TypeError: 'int' object is not subscriptable\n"]
*** extract_tb:
[('Ngram_ranking.py', 121, 'probability_items', "pprint(type(four_grams['_rank']))")]
*** format_tb:
[' File "Ngram_ranking.py", line 121, in probability_items\n pprint(type(four_grams[\'_rank\']))\n']
*** tb_lineno: 121
Exception in on line 121: pprint(type(four_grams['_rank'])): 'int' object is not subscriptable
Traceback dla linii 115
['Traceback (most recent call last):\n', ' File "Ngram_ranking.py", line 115, in probability_items\n pprint(type(three_grams[\'_rank\']))\n', "TypeError: 'int' object is not subscriptable\n"]
*** extract_tb:
[('Ngram_ranking.py', 115, 'probability_items', "pprint(type(three_grams['_rank']))")]
*** format_tb:
[' File "Ngram_ranking.py", line 115, in probability_items\n pprint(type(three_grams[\'_rank\']))\n']
*** tb_lineno: 115
Exception in on line 115: pprint(type(three_grams['_rank'])): 'int' object is not subscriptable
pprint (dane) na górze probability_items (dane)
{'aesthetic': {'_rank': 290,
'feeling': {'_rank': 10,
'the': {'_rank': 10,
'feeling': {'_rank': 10, 'of': 10}}},
'perception': {'_rank': 280,
'and': {'_rank': 190,
'the': {'_rank': 190,
'design': 15,
'environment': 5,
'music': 100,
'painting': 15,
'work': 5,
'works': 50}},
'of': {'_rank': 90,
'the': {'_rank': 50,
'work': 30,
'world': 20},
'their': {'_rank': 40, 'female': 40}}}}}
Czy możesz podać kompletny stacktrace? – thefourtheye
@thefourtheye edytował post, teraz z tracebackami (zapożyczony kod tb z: http://docs.python.org/3.3/library/traceback.html) – puredevotion
Sugestia: za każdym razem, gdy robisz 'pprint (type (x_grams ['_ rank']))' poprzedź go 'pprint (type (x_grams))' just, aby sprawdzić, jaki typ 'x_grams' jest przed próbą indeksu dolnego to. Wygląda na to, że w kodzie jest miejsce, w którym przypisujesz int jednej z wartości 'x_grams', w której masz na myśli tylko przypisanie dyktatury, ale nie jest jasne, gdzie. –