代码python单词try / except的频率

时间:2016-02-28 22:44:54

标签: python

我不理解python中的以下代码:

def frequency(text):
if text == "":
    return ""

cuvinte = text.split(" ")
frecv = {}

for cuv in cuvinte:
    try:
        frecv[cuv] += 1
    except:
        frecv[cuv] = 1

print (frecv)

例如,如果我跑:

frequency('zero one two three one four two one five')

它会告诉我们:

{'four': 1, 'three': 1, 'two': 2, 'one': 3, 'five': 1, 'zero': 1}

但为什么呢?

的含义是什么
 try:
        frecv[cuv] += 1
 except:
        frecv[cuv] = 1  ?

4 个答案:

答案 0 :(得分:0)

这会处理W: Failed to fetch http://repo.mongodb.org/apt/ubuntu/dists/freya/mongodb-org/3.0/multiverse/binary-amd64/Packages 404 Not Found W: Failed to fetch http://repo.mongodb.org/apt/ubuntu/dists/freya/mongodb-org/3.0/multiverse/binary-i386/Packages 404 Not Found E: Some index files failed to download. They have been ignored, or old ones used instead. 异常。 KeyError相当于frecv[cuv] += 1,这意味着frecv[cuv] = frecv[cuv] + 1密钥必须出现在字典中。所以代码可以读作“如果有cuv的值,则为其添加1;否则将其设置为1”。

更优雅的方式是写

cuv

答案 1 :(得分:0)

当您frecv[cuv] += 1实际检索frecv[cuv]的当前值时,向其添加1,然后将其分配给frecv[cuv]。当frecv[cuv]没有任何值时,因此无法检索它,因此会发生异常(KeyError)。

答案 2 :(得分:0)

try..except..exception handling mechanism in Python

该块意味着,当freecv[cuv] += 1失败时(在这种情况下,当cuv中没有freecv时),它会运行freecv[cuv] = 1。它只是首先尝试增加单词的计数,当它失败时(因为该单词尚未添加)存在,它使用1。

顺便说一下,这段代码可以写得更简单:

>>> from collections import Counter
>>> def frequency(text):
...     return Counter(text.split(" "))
...
>>> frequency('zero one two three one four two one five')
Counter({'one': 3, 'two': 2, 'three': 1, 'four': 1, 'zero': 1, 'five': 1})

答案 3 :(得分:0)

try..except是处理 frecv 字典不包含 cuv 引用的键的情况的一种非常懒惰的方式。更好的方法是这样写:

if cuv not in frecv:
    frecv[cuv] = 1
else:
    frecv[cuv] += 1

try..except在这里工作的原因是,如果字典中不存在 cuv 键,将抛出KeyError异常。在这种情况下,代码将设置为默认值为1。

这样的try..except案例是(非常)不好的做法的原因是因为它实际上也可能捕获其他错误。想象一下这就是代码:

try:
    freqv[cuv] += 1
except:
    frecv[cuv] = 1

注意try..except块中的拼写错误?这将由异常处理程序捕获,并且所有字典值最终都为1。