python - 如何链接可能在 Python 中返回 None 的属性查找?

标签 python optional-chaining

我的问题是一般性问题,当其中一个中间属性查找可能返回 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/

相关文章:

python - Pandas - 添加新的聚合功能

python - 如何在 django-tinymce 中启用插件?

javascript - @babel/plugin-proposal-optional-chaining 在 Vue.js <script> 标签中不起作用

javascript - 可选的链接运算符在本地主机上工作但不在生产中

python - 如何在plotly scattergeo中自定义颜色条?

python - 如果表为空,如何用 python 检查?

python - 使用 OAuth python

swift - 为什么我在进行可选链接时会出错?

javascript - JSHint 抑制可选链接的错误