python - 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"))
解决方案
您遇到的问题是,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 除非您尝试了解关键字参数包,否则这可能是一个更好的解决方案。
推荐阅读
- sql - 在子表上运行带有条件的父表中的数据 - SQL Server
- python - Python Pandas 从长到宽
- r - 分配具有唯一字符变量的新列
- snowflake-cloud-data-platform - 使用 git-bash 生成加密的私钥文件
- amazon-web-services - AWS Cloudwatch 警报将参数传递给另一个参数
- asp.net - 浏览 EF Core 中的第三个模型
- android - 如何在android中的微调器视图下方显示下拉列表项?
- linux - 如何在 Ubuntu 上降级 Thrift 版本?
- swift - 如何将 stringDateJson 格式化为标签?
- html - HTML & CSS 图像和文本对齐