字典中存在键时出现KeyError

时间:2020-05-20 14:05:33

标签: python dictionary keyerror

我正在编写一个检测推文语言并应用与该语言匹配的词法的代码。用来正常工作的代码可以完成工作。然后,即使字典中存在“ en”,它也会抛出public function articles() // <---- You were missing the 's' { return $this->belongsToMany(Article::class); } 。我看过多个已经有答案的问题,但似乎没有任何作用。我将提供仅涉及德语的代码部分(因此不包括其他语言)。如果发现的语言不在词典中,则将代码写入该位置,它将自动分类为英语。

KeyError: 'en'

在将推文分类为肯定,混合或否定之后,错误出现在行from langdetect import detect import glob import re rsc_lg = { "de" : {"pos" : "ressources/positive_words_de.txt", "neg" : "ressources/negative_words_de.txt"}, "en" : {"pos" : "ressources/positive_words_en.txt", "neg" : "ressources/negative_words_en.txt"} } dic = {} liste_resultats = [] for path in glob.glob("corpus/*/*/*"): f = open(path, errors="ignore") read = f.read().lower() lang = detect(read) if lang not in dic: dic[lang] = {} if lang not in rsc_lg : lang = "en" ###german### f_de_pos = open(rsc_lg[lang]["pos"]) f_de_neg = open(rsc_lg[lang]["neg"]) de_pos = f_de_pos.read().lower().split() de_neg = f_de_neg.read().lower().split() f_de_pos.close() f_de_neg.close() words = read.split() pos_words_de = set(words) & set(de_pos) neg_words_de = set(words) & set(de_neg) if len(pos_words_de) > len(neg_words_de): diagnostic = "positive" if len(pos_words_de) == len(neg_words_de): diagnostic = "mixed" if len(pos_words_de) < len(neg_words_de): diagnostic = "negative" # print("this german tweet is ", diagnostic) dic[lang][path] = diagnostic corpus, lang, classe, nom = re.split("\\\\", path) liste_resultats.append([nom, lang, classe, diagnostic]) import json w = open("resultats_langdetect_german.json", "w") w.write(json.dumps(liste_resultats, indent= 2)) w.close() f.close() print("done") 上。 就像我说的那样,尽管我对代码完全不做任何更改,但此操作之前还是很好,但突然停止了工作。

1 个答案:

答案 0 :(得分:2)

问题是,如果遇到未知语言,则您执行dic[lang] = {},然后立即执行lang = "en"。现在,如果以lang为例,例如"es",您将得到dic == {"es": {}}lang == "en"。在代码的后面,您进行了dic[lang][path] = diagnostic,但是在此时"en" not in dic,因为它仍然使用未知语言代码("es")。您可能想切换两个语句的顺序,即首先设置lang = "en",然后再执行dic[lang] = {}