我的问题是一般性问题,当其中一个中间属性查找可能返回 None
时,如何链接一系列属性查找,但自从我在尝试使用 Beautiful Soup 时遇到了这个问题,我我会在那种情况下问它。
Beautiful Soup 解析 HTML 文档并返回一个对象,该对象可用于访问该文档的结构化内容。例如,如果解析后的文档在变量 soup
中,我可以通过以下方式获取其标题:
title = soup.head.title.string
我的问题是,如果文档没有标题,则 soup.head.title
返回 None
和后续的 string
查找抛出异常。我可以将链条打断为:
x = soup.head
x = x.title if x else None
title = x.string if x else None
但是,在我看来,这是冗长且难以阅读的。
我可以写:
title = soup.head and soup.head.title and soup.title.head.string
但这是冗长且低效的。
如果想到一个解决方案,我认为这是可能的,那就是创建一个对象(称之为 nil
),它会为任何属性查找返回 None
。这将允许我写:
title = ((soup.head or nil).title or nil).string
但这很丑陋。有没有更好的办法?
最佳答案
最直接的方法是包装在 try
...except
block 中。
try:
title = soup.head.title.string
except AttributeError:
print "Title doesn't exist!"
确实没有理由在每个级别进行测试因为删除每个测试会在失败情况下引发相同的异常。我认为这在 Python 中是惯用的。
关于python - 如何链接可能在 Python 中返回 None 的属性查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15280511/