我正在讀取有效的JSON文件(嵌套5層深),然後向其中添加一些數據,然後嘗試使用該數據進行一些計算。隨機「int不可下標」行爲
我得到int is not subscriptable
隨機錯誤。我無法把頭圍住它。鑄造到str()
沒有幫助,用pprint
打印並沒有緩解它,鑄造到int()
輸入也沒有幫助。我拼命地跑出來的選項...
主要功能
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(數據)
所有值都在5嵌套級別數,並添加在樹上向上工作。我將int()
轉換爲輸入作爲可能的解決方案,但這並沒有幫助。 與獲得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(數據)出現該問題的
這是發生的錯誤在哪裏。看似隨意,它會抱怨int is not subscriptable
,其中x_rank
或x_grams['rank]
正在打印或分配,即使他們的評估與type()
(如果它的工作,說<class 'int'>
) 我標記最常見的線以下注釋。 古怪的是,2號線和3不會拋出一個異常...
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
在randowm時尚,一個異常被拋出以上的常見錯誤點。由於這些例外,下面的行永遠不會到達。但是,如果刪除常見錯誤點,則下面的行將成爲錯誤點。 有時候,它在內部for循環中完成全部運行,在評估時打印<class 'int'>
,以及全部,直到它停在異常處。
我不知道發生了什麼,我甚至不知道當我和Type()
評估它,因爲這是一個奇怪的問題怎麼能發生這種錯誤,而且我明明做一個奇怪的錯誤,我把所有的代碼放在這裏:https://gist.github.com/puredevotion/7922480
希望有人能幫助!
回溯詳細
['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
回溯爲線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(數據)在probability_items的頂部(數據)
{'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}}}}}
你可以給完整的堆棧跟蹤嗎? – thefourtheye
@thefourtheye編輯帖子,現在追蹤回溯(從http://docs.python.org/3.3/library/traceback借用tb代碼。html) – puredevotion
建議:每次你在'pprint(type(x_grams))'''前面加'pprint(type(x_grams ['_ rank']))''以驗證'x_grams'是什麼類型,然後再嘗試下標它。看起來好像在代碼中有一些地方將int分配給其中一個'x_grams'值,你只能指定一個字典,但不清楚它在哪裏。 –