今天工作犯了一个特别2的错误

今天用python的lxml组件解析网页代码,需要找到特定区域的文本,lxml的etree有HTML方法可以将得到的html代码转换成树结构,然后用xpath寻找特定区域

当我找到这个区域,我需要得到该区域内的文本(在c#里面htmlnodeelement有个innertext的属性可以直接得到)而在lxml里面HTML方法返回的element对象没有这个方便的属性,只有个text属性是返回当前node自己的text并不包括他的subnode的text,当然lxml里有另外一种方法可以得到htmlelement,htmlelement可以通过text_content方法可以直接得到,但是那需要使用htmlparse来解析网页代码,我又懒得把解析那部分代码改掉,所以我决定自己写个递归函数(因为是树结构嘛),来得到我要的文本内容

def gettext(node):

if len(node)==0:

return node.text if node.text is not None else ""

else:

return node.text if node.text is not None else "" + "".join([gettext(x) for x in node])

这个函数看上去是那么的完美,结果却没有得到我想得到的结果,在经过我15分钟的辛勤debug之后,我发现我tm就是个sb,居然忘记在最后一行里面用括号括住node.text的部分,结果就是只有当node.text是none的时候才会递归

正确的最后一行应该是

return (node.text if node.text is not None else "") + "".join([gettext(x) for x in node])

错误的原因可以归结为马虎(这个词在我童年的时候一次次刺痛了我,我长大才发现,这么马虎我居然是随我妈,我健全的长大真是个奇迹啊),也可以归结为我并不了解if else和+的运算优先级

时间: 2024-08-01 06:28:15

今天工作犯了一个特别2的错误的相关文章

一个特别适合新手练习的Android小项目——每日一妹纸

介绍 每天更新一张精选妹纸图片,第一版目前已完成,本项目会持续更新,遇到任何问题欢迎与我联系^_^ 为什么说这是一个特别适合新手练习的小项目? 服务器API接口功能丰富且无访问次数限制 包含了常见的网络通信,数据缓存等功能 使用了流行的Realm,Retrofit,Glide,Butterknife等开源项目,方便新手学习他们的使用 遵循Material Design规则 示例 项目当然是开源的啦,源码请戳下面的链接 https://github.com/SparkYuan/Meizi ----

一个null引发的错误

写程序时,发生一个unrecognized selector的错误,很显然,这是一个经典错误,运行时找不到可调用的方法. 系统提示的reason是 -[NSNull length] 错误 经过查找,原来将从数据库中查出的 null 值,赋值给了 lbl.text ,导致出现了上述错误. 解决方法: 在赋值前进行判断,取到的值是否为null.此处取到的路径是:app.Raing; if ([app.Rating isMemberOfClass:[NSNULL class]])//判断是否为null

今天才发现,自已犯了一个低级的逻辑错误,不可原谅

一个应用提交审核几天了,晚上在斗地主突然弹出提示,审核没有通过:因应用中一个页面显示为空白页. 我当时就晕了,之前测试的时候也有一二个用户跟我反应过,我当时没太注意,因为我这边测试正常. 开始一行一行查代码,找原因,花了差不多一个小时,终于找到原因: 一个低级的逻辑错误. m = 0 n = 1    if m = 0 then     response.write("m 等于 0") else        response.write("m 不等于 0")   

一个意想不到的CDO.Message 错误

原文:一个意想不到的CDO.Message 错误   几个月之前,写了一个服务从MSMQ取消息发群发邮件的程序,一直也没时间测试,今日一试,出现发送邮件时报错,异常情况如下:   "System.Web.HttpException: 未能访问“CDO.Message”对象. ---> System.Reflection.TargetInvocationException: 调用的目标发生了异常. ---> System.Runtime.InteropServices.COMExcep

C++(MFC)踩坑之旅 ------- 新建项目弹出“发生一个或多个错误”

结束隔离,回公司上班,把在家办公的程序考回公司的电脑,结果出错了,每当我新建项目时,都会弹出"发生一个或多个错误",点确定后回到新建项目的设置上面,折腾了两天时间才解决,以下是我的解决思路和操作方法: 思路:年前的时候公司电脑没问题,年前年后有差别的地方在于:我在家时所写的程序(MFC)是自己新建了属性配置表, 解决方法:用公司电脑新建属性配置表,我的做法是配置表名字跟在家里一样的,并且配置内容也一样. 结果:成功了. 原文地址:https://www.cnblogs.com/chen

Erlang网络编程中的一个特别的函数prim_inet:async_accept/2(转)

为了研究怎么用Erlang写一个游戏服务器,我很幸运的下到了一份英雄远征的服务器Erlang源码,这两天花了点时间看代码,其中看到做TCP的accept动作时,它是用的一个函数prim_inet:async_accept/2,这个可跟书上说的不一样(一般来说书上教的是用gen_tcp:accept/1),于是我google了一下,发现找不到文档,再翻一下发现已经有不少人问为什么这是一个undocumented的函数,也就是说Erlang就没想让你去用这个函数,所以文档自然没提供.一般来说undo

一个特别不错的jQuery快捷键插件:js-hotkeys

这其实不是什么新技术,这个插件在很早前就已经发布了,之前有项目用到,所以分享出来添加方式的例子 jQuery.hotkeys.add('esc',function (){ //执行函数 }); jQuery.hotkeys.add('Ctrl+a',function (){ //执行函数 }); 支持的快捷键如下:(注意使用时避开浏览器默认的一些快捷键:如ctrl+s) PS:懒得引JS了,支持下面的这些快捷键,想用的小伙伴自己可以测试一下哦! 一个jQuery的热键(快捷键)的插件,可以让你很

一个特别不错的http请求类

using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Crypto

Rails当你运行一个数据库回滚错误:ActiveRecord::IrreversibleMigration exception

最近rails3.2在更改数据库表字段,然后要回滚取消,但在运行rake db:rollback命令,错误: rake aborted! An error has occurred, all later migrations canceled: ActiveRecord::IrreversibleMigration/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/com