我的问题是一个普遍的问题,如何在中间的一个可能返回时链接一系列属性查找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
但这很丑陋。有没有更好的办法?