首页 > 解决方案 > Python 中的 KeyError **kwargs

问题描述

只有第一个打印命令有效。我不知道为什么。我想根据传入的内容显示不同的前缀和后缀。

# We are going to have a word and a prefix or a suffix before or after
# that word

def joinWords(string, **sFox):
    if sFox['prefix']: 
        return sFox['prefix'] + string
    elif sFox['suffix']: 
        return string + sFox['suffix']
    return string




#Why does this work?
#print(joinWords("Cookie", prefix="sugar"))

#And this does not?
#print(joinWords("Cookie", suffix="monster"))

标签: pythonpython-3.x

解决方案


您遇到的问题是,kwargs不会包含未指定的键。当您尝试索引一个不存在的字典键时,它会引发一个KeyError,

最直接的解决方案是在尝试访问之前检查密钥是否存在:

    if 'prefix' in sFox and sFox['prefix']:

还有更好的 Pythonic 方法可以做到这一点。如前所述,dict.get()默认值是一个不错的选择:

    if sFox.get('prefix'):

这样,如果prefix'不在字典中,则该值将被None评估为布尔值 false 并且完美地完成了伎俩。

当然,如果您真的不需要随机关键字参数,请尝试使用默认参数:

def joinWords(string, prefix=None, suffix=None):
    if prefix:
        return prefix + string
    elif suffix: 
        return string + suffix
    return string

IMO 除非您尝试了解关键字参数包,否则这可能是一个更好的解决方案。


推荐阅读