从联系人信息列表中删除电话号码

2024-04-26 18:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

为了从下面的html部分获取/剥离文本,我对页面进行了解析并引入了一个变量。你知道吗

从这个变量开始,我将范围缩小到这些特定的div,再到另一个名为items的变量。现在,为了去掉文本(本例中为电话号码),我使用了类似for循环的list conservation,phone=[项目.查找(class='phone')。为items中的item获取\u text()]

<div class="description">
<div class="phone">
   <a href="tel:(000) 000 -0000" title="call (000) 000 -0000">
     (000) 000 -0000
     </a>
</div>
<div class="description">
<div class="phone">
   <a href="tel:(111) 111 -1111" title="call (111) 111 -1111">
     (111) 111 -1111
     </a>
</div>

所以我得到了我期望的结果。结果里只有那些电话号码。 ['(000)000-0000','(111)111-1111']

我的问题是,当页面中的任何div下都没有电话号码时,会出现错误“AttributeError:'NoneType'对象没有属性'get\u text'”

我知道我们为什么会犯这个错误。当结果返回为none时,它抛出一个错误,即找不到none的get\u text属性。我已经阅读了其他关于Stackoverflow中这个错误的文章,但是我不想使用try-except方法,而是想在单行中完成它。你知道吗

这就是我想做的

运行命令,phone=[项目.查找(class='phone')对于items中的item]将获得如下内容。你知道吗

[None, <div class="phone"> <a href="tel:(000) 000-0000" title="call (000) 000-0000">(000) 000-0000</a> </div>, <div class="phone"> <a href="tel:(111) 111-1111" title="call (111) 111-1111">(111) 111-1111</a> </div>

在此之后,我们是否可以在一行中组合if else和for循环,以剥离电话号码并打印“None”,因为如果list元素具有“None”值。你知道吗

尝试这样的操作,phone=[item='None'if item=='None'else项目.查找(class='phone').get\u text()for items in items]但是,我没有得到结果。感谢您的帮助。你知道吗

参考文章One-line list comprehension: if-else variantsPython for and if on one line


Tags: textdivnoneforiftitle错误phone
1条回答
网友
1楼 · 发布于 2024-04-26 18:22:56

问题是您将'None'与类NoneType进行比较。两者不相等。要获得正确的结果,必须执行以下操作:

numbers = ['None' if item == None else item.find(class_='phone'.get_text()) for item in items]

注意我是如何将该项与None(一个nonetype)而不是'None'(一个字符串)进行比较的。你知道吗

相关问题 更多 >