我正在尝试通过投入自己并试图完成工作来学习Python。我在基本的东西上遇到了麻烦。我可以帮忙吗?
我正在使用os.walk
查找我的(Jekyll)markdown文件,通过python-frontmatter加载他们的frontmatter,并收集feature_image属性列表,这些属性可能在每个文件中,也可能不在。
根据图书馆的文档,前端可以作为字典访问,我的谷歌搜索说我应该可以使用
if "property" in dict:
构造以查看属性键是否在dict中定义,但是当我尝试时遇到“KeyError:0”错误。
这是我走了多远:
import os
import frontmatter
markdownExt = ("md", "markdown")
templateDir = "jekyll/_posts"
for root, dirs, files in os.walk(templateDir, topdown=False):
for name in files:
if name.endswith(markdownExt):
post = frontmatter.load( os.path.join(root, name) )
if "feature_image" in post:
print(post["feature_image"])
这是我在运行此脚本时得到的内容
Traceback (most recent call last):
File "./test.py", line 14, in <module>
if "feature_image" in post:
File "/usr/local/lib/python3.5/site-packages/frontmatter/__init__.py", line 124, in __getitem__
return self.metadata[name]
KeyError: 0
感谢您的帮助!
答案 0 :(得分:3)
使用简答:
if "feature_image" in post.keys(): #see the keys function?
更长的答案:
Post类没有提供__contain__方法,所以python尝试使用Post .__ getitem__使用迭代器协议迭代它然后你爆发了Key 0 Exception
有关更多信息,请尝试查看python如何迭代事物:)
答案 1 :(得分:1)
如果您不确定字典中的值是什么,那么最好的选择是使用dict.get("key", "default value")
,如果默认情况下值不在字典中,则此方法将返回None
。在布尔上下文None == False
。
在你的情况下,它将看起来像:
if post.get("feature_image"):
# do smth