Geçerli bir JSON dosyası okuyorum (yuvalanmış 5 seviye derinlik), ardından bazı veriler ekliyorum ve daha sonra bazı hesaplamalar için bu verileri kullanmaya çalışıyorum.Rastgele "int abonelik değil" davranışı
int is not subscriptable
hataları rastgele bir şekilde alıyorum. Kafamı etrafına dolamıyorum. str()
için döküm yardımcı olmadı, pprint
ile yazdırma, onu hafifletmek değil, girişte int()
için yardımcı da yardımcı olmaz. Umutsuzca
ana işlevi ... seçenekler tükeniyor
with open(rNgram_file, 'r', encoding='utf-8') as ngram_file:
data = json.load(ngram_file)
data = rank_items(data)
data = probability_items(data)
tüm değerler 5-yuvalanmış seviyede sayılır ve eklenir (veri)
rank_items ağacın içinde yukarı doğru çalışıyor. Girişe int()
dökümünü olası bir çözüm olarak ekledim, ancak bu yardımcı olmadı. mesele hataları meydana burasıdır
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 (veri) alma ile ortaya çıkar. Görünüşe göre rastgele, x_rank
veya x_grams['rank]
type()
ile ((eğer çalışırsa, <class 'int'>
diyor) aşağıdaki gibi en yaygın satırları işaretlemiş olsalar bile yazdırılıyor veya atanıyorlar int is not subscriptable
hakkında şikayette bulunacaklar. Tuhaftır ki hat 2 ve 3 randowm tarzda
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
bir istisna yukarıda yaygın hata noktasında atılır ... bir istisna olmadı. Bu istisnalar nedeniyle, aşağıdaki satırlara asla ulaşılamamıştır. Ancak ortak hata noktalarını silerseniz, aşağıdaki satırlar hata noktaları olur. Ve bazen, tüm içten-içe döngü içinde, bir değerlendirme istisnasında duruncaya kadar değerlendirildiğinde, <class 'int'>
yazdırma işlemini gerçekleştirir. Bu hata burası tuhaf bir konu olduğundan i Type()
ile değerlendiriyorum oluşabilir nasıl ben bile anlamıyorum, hiçbir ipucu ne oluyor var ve açıkçası garip hata yapıyorum Tüm kodu buraya koydum: https://gist.github.com/puredevotion/7922480
Birisi size yardımcı olabilir!
traceback probability_items üstünde 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 (veri) hattı için
['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 detayları (veri)
{'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}}}}}
Komple stacktrace verebilir misiniz? – thefourtheye
@thefourtheye, yayınları şimdi (http://docs.python.org/3.3/library/traceback adresinden tb koduyla ödünç aldı) düzenledi.html) – puredevotion
Öneri: pprint'i her yaptığınızda (type (x_grams ['_ rank'])) 'pprint (type (x_grams)) ile öncelikten sonra' 'x_grams 'türünde ne tür bir giriş yapmayı denediğinizi doğrulayın. o. Görünüşe göre, kodda sadece bir dict atamak istediğin x_grams değerlerinden birine int a atadığın bir yer var gibi görünüyor, ama nerede olduğu belli değil. –